强制 ssh 在登录后根据配置更改目录

强制 ssh 在登录后根据配置更改目录

有没有办法强制ssh更改它的工作目录~/.ssh/config或使用其他配置文件?

我有很多不同环境的服务器。每个环境都安装在特定目录中,登录后立即进入该特定目录会非常有帮助。

不幸的是,有时可以在同一服务器上托管多个环境。

这就是为什么我需要使其基于配置,因为目前我在每个环境的配置中有一个单独的条目。例子:

Host env1
User me
Port 2222
# here directory should be /srv/project/env1
HostName 172.16.16.2

Host env2_test
User me
Port 2222
# here directory should be /srv/project/env2_test
HostName 172.16.16.2

Host env54
User me
Port 2225
# here directory should be /srv/project/env54
HostName 172.16.16.3

我可以用 来做到这一点ssh -t env54 'cd /srv/project/env54 ; bash',但每次都重新输入甚至将其放入alias.

我相信 *nix 方式是通过配置来处理它。

答案1

在服务器上,.profile或登录时运行的任何内容:

if [ -n "$USE_DIR_A" ]; then
    cd dir_a
elif [ -n "$USE_DIR_B" ]; then
    cd dir_b
fi

然后在本地机器上设置两个都变量:

export USE_DIR_A=yes
export USE_DIR_B=yes

并且,将你的设置.ssh/config如下:

Host env1
User me
Port 2222
# here directory should be /srv/project/env1
SendEnv USE_DIR_A
HostName 172.16.16.2

Host env2_test
User me
Port 2222
# here directory should be /srv/project/env2_test
SendEnv USE_DIR_B
HostName 172.16.16.2

当然,您可以只有一个发送一个变量的 ssh 配置,并将该变量设置为每台计算机所需的目录,但这不是您所要求的。

但请注意 SSH 连接共享:它可能会影响后续连接启动时运行的脚本。

答案2

您可以command=cd /srv/project/env1 && bash在远程服务器~/.ssh/authorized_key文件中使用标志来获取源服务器的适当公钥。欲了解更多信息,你可以检查这个问题关于 serverfault 以及有关有用选项(例如authorized_keys 文件中的公钥中的命令)的更多信息,请检查此博客

我在我的测试机(Virtualbox 上的 Centos 6.5)上尝试了这个,效果很好。

[root@CentOS-VM1 ~]# ssh nischay@localhost
[nischay@CentOS-VM1 demo]$ pwd
/tmp/demo

的内容~/.ssh/authorized_keys

command="cd /tmp/demo && bash" ssh-dss AAAAB3NzaC1kc3MAAACBAOEKjYcSts6XZEtdzlYCAArgijN2yzi1RwlhOf7E2LHPqUI6z+od9Ye/E5e0imaJhyGvfb21b6o3U6PzWrwVIGZn9TA2/iiaaQS2R2w60/R07FY1tmas8y6TTmfelir/ZfAQnq4OT1KEf5SsYk4TIaC1h5gIL3wGhZyh54dsL1w1AAAAFQCj22qNcmQPToLi/P7sXH3SplxK8QAAAIEAsbiS8hQMjE0HkdCL0sT8/GFBJIo8EuNQh4AEjRv/5DU8Vk5i1CV7qO//spp8h/l5cDBWEC30VBWYk9jbN647VQonn24oXz3aXyQCsPYuqCDGl1MqhUdbHunXk9+YSU7Z13xc66LOD+oURJxFGTzndG5TnvPwhbSZsxebWMPlciYAAACAAe/gdrLn4Zkdp72Oa4JYKbaVD0rhW/p5eg+lSX8cm1m6nbYvGzcfaKF3cKTggGJH37IrDpMnAmuxzFJOryefDeUqGd/HmUOVN8PFnIJpSDQ1StOFx+0WwpiOHLXF4aaOpE/3SLrweuxywWDv4wymp0rXoSzL4mtNtB+u3pEOTgU= root@CentOS-VM1

其他选项,如端口号、主机名别名、用户名、私钥和端口转发选项,您可以在~/.ssh/config源框中的文件中提及。

答案3

我假设我已经正确理解了你的问题,并且你对不同的环境有不同的 SSH 端口。如果是这样:-

.bash_profile在每台远程计算机上添加以下内容的变体:-

if [[ ! -z $SSH_CLIENT ]]; then
    PORT=$(echo "$SSH_CLIENT" | awk '{print $3}')
    case $PORT in
        2222)
            cd /srv/project/env1
        ;;
        2225)
            cd /srv/project/env2
        ;;
    esac
if

相关内容