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

Gar*_*eth 107 ssh login

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

Host example.net
LocalCommand "cd web"
Run Code Online (Sandbox Code Playgroud)

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

/bin/bash: cd web: No such file or directory
Run Code Online (Sandbox Code Playgroud)

尽管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
Run Code Online (Sandbox Code Playgroud)

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

小智 85

这有效:

ssh server -t "cd /my/remote/directory; bash --login"
Run Code Online (Sandbox Code Playgroud)

如果目录不存在,则创建一个目录:

ssh server -t "mkdir -p newfolder; cd ~/newfolder; pwd; bash --login"
Run Code Online (Sandbox Code Playgroud)

如果您不添加bash到路径的末尾,则在cd命令运行后退出。如果你不添加,--login那么你~/.profile就不是来源。


sob*_*3ch 60

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

  • 在某些机器上,你可能需要将 `cd /path/to/your/destination` 附加到 `~/.bashrc` 而不是 `~/.bash_profile`。结果应该是一样的。 (4认同)

BMD*_*Dan 44

cd 是一个内置的 shell。LocalCommand 执行如下:

/bin/sh -c <localcommand>
Run Code Online (Sandbox Code Playgroud)

您想要做的事情无法通过 SSH 真正完成;您需要以某种方式修改外壳,例如通过 bashrc/bash_profile。

<近十年后编辑...>

LocalCommand反正不是你想要的 那是在你的机器上运行。你要RemoteCommand。这样的事情对我有用:

/bin/sh -c <localcommand>
Run Code Online (Sandbox Code Playgroud)

  • 是的,只是想提一下。您可以将“cd”命令放在远程服务器的“~/.bashrc”中。 (4认同)
  • “RequestTTY yes” 的用途是什么? (2认同)

EEA*_*EAA 5

您是否在 ssh 配置中启用了该指令?

PermitLocalCommand yes
Run Code Online (Sandbox Code Playgroud)

默认值为no,在这种情况下您的LocalCommand指令将被忽略。

或者,您是否尝试过将命令添加到您的.bashrc文件中?


小智 5

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

alias ssh_myserver='ssh server_name -t "echo cd /path/to/desired/dir>/tmp/.bashrc_tmp; bash --rcfile /tmp/.bashrc_tmp"'
Run Code Online (Sandbox Code Playgroud)

更详细:

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


小智 5

所以我搜索了很多网站(stackoverflow,这个),但没有找到我想要的。我最终创建了自己的 shell 脚本。我把它贴在这里。您也可以将其复制到 $PATH 中的目录。

#!/bin/bash
ssh -t <username@hostname> "cd ~/$1; exec \$SHELL --login"
Run Code Online (Sandbox Code Playgroud)

所以在这之后。我愿意:

connect <foldername>
Run Code Online (Sandbox Code Playgroud)

注意:更改路径变量后,您可能需要注销并重新登录