我怎样才能直接ssh到一个特定的目录?

我经常需要login到几台服务器中的一台,然后到这些机器上的几个目录之一。 目前我做这样的事情:

 localhost〜] $ ssh somehost

欢迎来到某个主机!

 somehost〜] $ cd / some / directory / somewhere / named / Foo
 somehost Foo] $ 

我有脚本,可以确定哪个主机和哪个目录我需要进入,但我不知道一种方法来做到这一点:

 localhost〜] $ go_to_dir Foo

欢迎来到某个主机!

 somehost Foo] $

有没有一个简单,聪明或任何方式来做到这一点?

您可以执行以下操作:

ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted ; bash" 

这样,你将在directory_wanted上获得一个shell。


说明

  -t Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, eg when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty. 
  • 如果你不使用-t则不会出现提示。
  • 如果你不加; bash ; bash然后连接将被closures,并返回控制到您的本地机器

你可以添加

 cd /some/directory/somewhere/named/Foo 

到另一个主机的.bashrc文件(或.profile或任何你所说的)。 这样,无论你做什么或从哪里ssh ,只要你login到服务器,它将cd到你正确的目录,你所要做的就是像正常使用ssh

诅咒,rogeriopvl的解决scheme也是有效的,但有点冗长,你必须记得每次都做(除非你做别名),所以看起来不那么“有趣”。

我已经创build了一个SSH和CD连续的服务器 – 正确地命名为sshcd 。 对于你给出的例子,你只需要使用:

 sshcd somehost:/some/directory/somewhere/named/Foo 

让我知道如果你有任何问题或问题!

我使用环境variablesCDPATH

login后直接进入的另一种方法是创build“别名”。 当你login到你的系统只需input该别名,你将在该目录中。

例如:Alias = myfolder'/ var / www / Folder'

login到您的系统types的别名(这可以从系统的任何部分)
如果不在bashrc中,这个命令将适用于当前会话。 所以你也可以把这个别名添加到bashrc中以备将来使用

$ myfolder =>带你到那个文件夹

我一直试图在Ubuntu服务器之间解决一段时间,而在~/.ssh/config使用基本的目标主机设置。 这工作:

$ ssh -t targetHost "cd /var/www/target-dir; bash"

其中targetHost匹配configuration的Host targetHost条目。

SSH本身提供了一种通信方式,它不知道任何目录。 既然你可以指定执行哪个远程命令(这是 – 默认情况下 – 你的shell),我会从那里开始。

在我的具体情况下,我只是想在远程主机上执行一个命令,在Jenkins从机的特定目录中:

 ssh myuser@mydomain cd /home/myuser/somedir ./commandThatMustBeRunInside_somedir exit 

但是我的机器不能执行ssh(它不能分配一个伪tty我想),并让我给以下错误:

 Pseudo-terminal will not be allocated because stdin is not a terminal 

我可以通过传递“cd to dir + my command”作为ssh命令的参数(不必分配一个伪terminal)并通过传递选项-T来显式告诉ssh命令我没有不需要伪terminal分配。

 ssh -T myuser@mydomain "cd /home/myuser/somedir; ./commandThatMustBeRunInside_somedir" 

只需使用以下命令修改您的家庭: usermod -d /newhome username