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

Dav*_*ing 11 proxy openssh

在我可以连接到特定的远程机器之前,我必须运行某个本地命令。所以,而不是ssh me@remote.machine我必须做

local_command
ssh me@remote.machine
Run Code Online (Sandbox Code Playgroud)

我想自动执行此操作,以便我只需要执行ssh remote.machine.

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

据我了解,我需要类似的东西

Host remote.machine
    ProxyCommand local_command; ssh me@remote.machine
Run Code Online (Sandbox Code Playgroud)

在我的~/.ssh/config文件中,但当然不完全是这样,因为它是圆形的!

Lai*_*han 13

如果使用ProxyCommand,您必须使用类似的东西/usr/bin/nc来连接服务器。

为了在连接之前调用您的命令,您需要使用sh -c "command list"将两个命令合并为一个。

Host remote.machine
    ProxyCommand sh -c "local_command; /usr/bin/nc %h %p"
Run Code Online (Sandbox Code Playgroud)

更多的:

如果你local_command太复杂,你可以使用一个脚本:

cat my_connect.sh
#!/bin/bash

local_command
/usr/bin/nc "$1" "$2"
Run Code Online (Sandbox Code Playgroud)

ssh 配置变为:

Host remote.machine
        ProxyCommand /path_to_my_connect.sh %h %p
Run Code Online (Sandbox Code Playgroud)

最后,您可以将自己的代理添加到 /usr/bin/nc