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


11

在连接到特定的远程计算机之前,必须先运行某些本地命令。所以不是ssh me@remote.machine我要做

local_command
ssh me@remote.machine

我想使它自动化,所以我只需要这样做ssh remote.machine

我知道我可以通过创建自己的ssh调用脚本来在shell级别上实现此目标/usr/bin/ssh,但是我可以使用ProxyCommand选项ssh_config吗?

据我了解,我需要类似

Host remote.machine
    ProxyCommand local_command; ssh me@remote.machine

在我的~/.ssh/config文件中,但这当然不是完全正确的,因为它是循环的!

Answers:


9

如果使用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


1

使用您链接的页面中的示例:

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 =端口)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.