我需要访问代理服务器后面的数据。 因此,我通常可以ssh到代理,然后ssh到目的地执行pipe理。 但是,不知道如何在bash中实现这一点。 我有一个本地ssh别名,将通过代理自动隧道当我“ssh目的地”,但这必须在我的环境或东西,而不是由脚本使用。
从本质上来说,是否有可能在bash中“ssh proxy ssh destination $ commmand”? 我已经尝试了这个确切的命令,并没有成功。
不完全是你想要的,但是如果转发一个端口是不可能的,你可以先build立一个SSH隧道:
ssh -L 2222:hostbehindproxy:22 user@proxy
接着
ssh -p 2222@localhost user@hostbehindproxy "command"
你可以devise一些能够随时保持隧道畅通的东西。 一个非常原始的方式:
while true; do # you need to have public key authentication for this to work on the background ssh -N -L 2222:hostbehindproxy:22 user@proxy sleep 1 done
您可以尝试在〜/ .ssh / config中添加这些行
Host remote_server HostName remote_server_url_or_ip User remote_user ProxyCommand ssh proxy_user@proxy nc %h %p
那么你将只能运行ssh remote_server 。 ip / url和用户将是在文件中定义的。 它将首先ssh 代理为用户proxy_user并在该会话中使用nc与远程服务器交谈。
为了使用您编写的命令,您必须pipe理从代理服务器到目标服务器的身份validation。 您可以在代理服务器上创build密钥对(使用ssh-keygen),然后将公钥放在目标服务器的authorized_keys文件中(在您使用的用户的.ssh /目录中)。
在密钥交换之后,你的“ssh proxy ssh destination $ commmand”应该工作。