如何通过SSH进入特定目录?


39

我经常登录到服务器,然后CD进入特定目录。是否可以将这两个命令简化为一个?

ssh bob@foo  
cd /home/guest

我想尽可能避免更改'foo'上的任何内容,因为我必须与服务器管理员一起清除它。我使用bash,但是我愿意接受其他shell的回答。

Answers:


22

只需将〜bob / .bash_profile文件的最后一行放在foo上即可:

cd /home/guest >& /dev/null

现在,每次您登录时(无论是通过SSH还是其他方式),都会运行cd命令。无需使用ssh乱搞。

我知道您曾写道,您希望“尽可能避免更改'foo'上的任何内容”,但是如果bob @ foo帐户是您的帐户,那么更改自己的.bash_profile应该可以接受,不是吗?


2
为什么,我认为这会很好。我不需要获得IT许可即可进行更改。您能否详细说明为什么需要>&/ dev / null?
13年

6
我认为应该是&> /dev/null。它可以防止在cd无法将目录更改为/ home / directory时可能显示的任何错误消息。如果您想查看这些消息,可以将其排除在外。
konsolebox

5
>&&>Bash相同。不过,后一种样式是首选。

此外,重定向到/ dev / null可以防止在屏幕上回显目录名称,而“ cd”可能会这样做。
DanB 2013年

41

这适用于OpenSSH:

ssh -t bob@foo 'cd /home/guest && exec bash -l'

最后一个参数在您的登录Shell中运行。-t传递给该标志的标志ssh强制ssh分配一个伪终端,这对于交互式外壳来说是必需的。-l传递给该标志的bashbash作为登录shell启动。


3
我想知道,在bash中添加-l选项也会有所帮助吗?... && exec bash -l
konsolebox

1
@konsolebox:那是个好主意。我已将其添加到我的答案中。

17

您也可以采用这种方式,类似于@EvanTeitelman的解决方案:

$ ssh -t bob@foo "cd /tmp ; bash"

或者,如果您不知道另一端的外壳:

$ ssh -t bob@foo "cd /tmp && exec \$SHELL"

或像这样:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.