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

spu*_*der 43 bash ssh

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

ssh bob@foo  
cd /home/guest
Run Code Online (Sandbox Code Playgroud)

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

小智 44

这适用于 OpenSSH:

ssh -t bob@foo 'cd /home/guest && exec bash -l'
Run Code Online (Sandbox Code Playgroud)

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

  • 我想知道,将 -l 选项添加到 bash 是否也有帮助?`... && exec bash -l` (3认同)

Dan*_*anB 25

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

cd /home/guest >& /dev/null
Run Code Online (Sandbox Code Playgroud)

现在每次登录(无论是通过 SSH 还是其他方式),都会运行 cd 命令。没有必要使用 ssh。

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

  • 我认为应该是`&> /dev/null`。它可以防止在 cd 无法将目录更改为 /home/directory 时可能显示的任何错误消息。如果您想查看这些消息,您可以将其排除在外。 (6认同)
  • `>&` 和 `&>` 在 Bash 中是相同的。不过后一种风格是首选。 (5认同)
  • 为什么是的,我认为这会很好用。我无需获得 IT 部门的许可即可进行更改。您能否详细说明为什么需要 >& /dev/null ? (2认同)

slm*_*slm 18

您也可以这样做,类似于@EvanTeitelman 的解决方案:

$ ssh -t bob@foo "cd /tmp ; bash"
Run Code Online (Sandbox Code Playgroud)

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

$ ssh -t bob@foo "cd /tmp && exec \$SHELL"
Run Code Online (Sandbox Code Playgroud)

或者像这样:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
Run Code Online (Sandbox Code Playgroud)