协助 bash 功能

协助 bash 功能

我需要从代理后面的服务器访问数据。因此,我通常可以通过 ssh 连接到代理,然后通过 ssh 连接到目标以执行管理。但是,不确定如何在 bash 中实现这一点。我确实有一个本地 ssh 别名,当我“ssh 目标”时,它将自动通过代理进行隧道传输,但这必须位于我的环境中或其他地方,并且脚本不能使用它。

本质上,在 bash 中是否可以执行“ssh proxy ssh destination $commmand”?我尝试过这个命令,但没有成功。

答案1

这不是你想要的,但如果无法转发端口,你可以先设置 SSH 隧道:

ssh -L 2222:hostbehindproxy:22 user@proxy

进而

ssh -p 2222@localhost user@hostbehindproxy "command"

你可以想办法让隧道一直保持打开状态。一种非常粗暴的方法:

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

答案2

您可以尝试在 ~/.ssh/config 中添加这些行

Host remote_server
  HostName remote_server_url_or_ip
  User remote_user 
  ProxyCommand ssh proxy_user@proxy nc %h %p

然后你将只能运行ssh 远程服务器。ip/url 和用户将是文件中定义的。它将首先 ssh 到代理人作为用户代理用户并在该会话中使用 nc 与远程服务器通信。

答案3

为了使用您编写的命令,您必须管理从代理服务器到目标服务器的身份验证。您可以在代理服务器上创建密钥对(使用 ssh-keygen),然后将公钥放在目标服务器的 authorized_keys 文件中(在您使用的用户的 .ssh/ 目录中)。

密钥交换后,您的“ssh proxy ssh destination $commmand”应该可以工作了。

相关内容