如何在 ssh 登录时自动更改目录?

如何在 ssh 登录时自动更改目录?

我试图ssh在登录时自动更改到特定目录。我尝试使用以下指令使该行为正常工作~/.ssh/config

Host example.net
LocalCommand "cd web"

但每当我登录时,都会看到以下内容:

/bin/bash: cd web: No such file or directory

尽管我的主目录中肯定有一个web文件夹。即使使用绝对路径也会出现同样的消息。要清楚的是,如果我cd web在登录后输入,我会进入正确的文件夹。

我在这里遗漏了什么?

编辑:

引号/绝对路径的不同组合会给出不同的错误消息:

LocalCommand "cd web"
/bin/bash: cd web: No such file or directory

LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory

LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error

这让我认为引号不应该存在,并且发生了另一个错误。

答案1

cd 是 shell 的内置命令。LocalCommand 的执行方式如下:

/bin/sh -c <localcommand>

您想要做的事情实际上无法通过 SSH 完成;您需要以某种方式修改 shell,例如通过bashrc/bash_profile

<近十年后编辑...>

LocalCommand无论如何都不是你想要的。这是你的机器。

你想要RemoteCommand。这样的事情对我有用:

Host example.net
  RemoteCommand cd / && exec bash --login
  RequestTTY yes

答案2

这有效:

ssh server -t "cd /my/remote/directory; bash --login"

如果目录不存在则创建目录:

ssh server -t "mkdir -p newfolder; cd ~/newfolder; pwd; bash --login"

如果您没有添加bash到路径末尾,则cd命令运行后您将退出。并且如果您没有添加--login,则您的~/.profile命令没有来源。

答案3

  1. 登录你的邮箱
  2. 编辑~/.bash_profile
  3. 在文件末尾添加cd /path/to/your/destination
  4. 保存并退出
  5. 从框中退出
  6. 再次登录,然后你应该登陆/path/to/your/destination

注意(2021 年 12 月):正如 @Matthias 指出的那样,在某些机器上,您可能需要将命令附加到~/.bashrc而不是~/.bash_profile

答案4

当您需要 ssh 并覆盖默认 .bashrc 文件时,这是一个更强大的解决方案。当远程服务器环境有多个文档根并由多个用户使用时,这很有用。

alias ssh_myserver='ssh server_name -t "echo cd /path/to/desired/dir>/tmp/.bashrc_tmp; bash --rcfile /tmp/.bashrc_tmp"'

更详细:

  1. 第一个命令在远程服务器的目录.bashrc_tmp中创建文件/tmp,内容为cd /path/to/dir
  2. 下一个命令将使用bash步骤 1 中指定的配置文件执行。这允许切换到所需目录并抑制默认值.bashrc
  3. 整个命令被包装为alias,因此在 ssh 客户端命令提示符下,它可以被调用为ssh_myserver

相关内容