ssh_config 的 ProxyCommand 在连接到远程计算机之前可以运行本地命令吗?

ssh_config 的 ProxyCommand 在连接到远程计算机之前可以运行本地命令吗?

在连接到特定的远程计算机之前,我必须运行某个本地命令。所以我不必做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 = 端口)

相关内容