在连接到特定的远程计算机之前,我必须运行某个本地命令。所以我不必做ssh [email protected]
local_command
ssh [email protected]
我想将其自动化,这样我只需要做ssh remote.machine
。
我知道我可以通过创建自己的ssh
调用脚本在 shell 级别实现此目的/usr/bin/ssh
,但是我可以使用代理命令的选项ssh_config
?
据我了解,我需要类似的东西
Host remote.machine
ProxyCommand local_command; ssh [email protected]
在我的~/.ssh/config
文件中,但当然不完全是这样,因为它是循环的!
答案1
如果使用ProxyCommand
,则必须使用类似的方法/usr/bin/nc
来连接服务器。
要在连接之前调用命令,您需要使用sh -c "command list"
将两个命令合并为一个命令。
Host remote.machine
ProxyCommand sh -c "local_command; /usr/bin/nc %h %p"
更多的:
如果你的local_command
太复杂,你可以使用脚本:
cat my_connect.sh
#!/bin/bash
local_command
/usr/bin/nc "$1" "$2"
ssh 配置变为:
Host remote.machine
ProxyCommand /path_to_my_connect.sh %h %p
最后,您可以将自己的代理添加到/usr/bin/nc
答案2
使用您链接的页面中的示例:
ProxyCommand /usr/bin/nc -X connect -x 192.0.2.1:8080 %h %p
调用 nc (netcat) 连接到代理(代理在 192.0.2.1:8080 上运行)并将 %h 和 %p 传递给 ssh 命令(%h = 主机名,%p = 端口)