有没有办法强制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