我试图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
- 登录你的邮箱
- 编辑
~/.bash_profile
- 在文件末尾添加
cd /path/to/your/destination
- 保存并退出
- 从框中退出
- 再次登录,然后你应该登陆
/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"'
更详细:
- 第一个命令在远程服务器的目录
.bashrc_tmp
中创建文件/tmp
,内容为cd /path/to/dir
- 下一个命令将使用
bash
步骤 1 中指定的配置文件执行。这允许切换到所需目录并抑制默认值.bashrc
。 - 整个命令被包装为
alias
,因此在 ssh 客户端命令提示符下,它可以被调用为ssh_myserver