ssh proxyjump 命令到配置文件

ssh proxyjump 命令到配置文件

我使用 ssh 命令通过 proxyjump 使用中间节点登录远程节点。远程节点和中间节点是 Linux 服务器,我的客户端是 Macbook。此命令有效,如下所示:

ssh -i .ssh/id_file -J user1@jump_node -A -D remote_port user2@remote_node

其中,我将 jump_node 和 remote_node 替换为中间节点和远程节点的主机名,并将 remote_port 替换为 remote_node 上的 sshd 端口。

我的第一个也是主要的问题是:如何将此命令变成配置部分我可以将其放入 .ssh/config 文件中吗?我查看了 ssh 手册页,但无法找到-D-A标志(我猜ForwardAgent yes-A?)的相应配置选项。有人可以解释一下这些标志以及如何使用此命令创建正确的配置部分吗?


我的另一个问题不太重要,但可以帮助我了解这里发生的事情。第二个问题是关于我发出稍微不同的命令时出现的错误。

我在网上读到的大多数文档都建议使用这样的命令:

ssh -i .ssh/id_file -J user1@jump_node user2@remote_node:remote_port

但是当我尝试此命令(带有和不带有标志-A)时,出现以下错误:

channel 0: open failed: connect failed: Name or service not known
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535

我无法弄清楚这个错误意味着什么以及我是否可以使用它的一些提示?

答案1

man 5 ssh_config

ForwardAgent yes
IdentityFile .ssh/id_file

Host jump_node
    User user1

Host remote_node
   ProxyJump jump_node
   User user2

然后运行ssh remote_node

ProxyJump如果您还为其指定了(另一个),您甚至可以通过这种方式构建一个链jump_node


第二个问题是ssh user2@remote_node:remote_port语法不正确。错误消息指出Name or service not known,因为它尝试(但失败)将其解析remote_node:remote_port为主机名(是的,带有内嵌冒号),这remote_node可能与您预期的不一样。尝试在没有的情况下运行相同的程序-J,错误消息会稍微清晰一些。

我将其解释为尝试指定 SSH 服务器在远程节点上监听的端口;为此,请使用-p命令行参数或Port配置文件中的主机条目选项。

这与命令行开关没有任何共同之处-D。它的参数不是“远程端口”。相反,该开关的作用完全不同,即它使 SSH 客户端在指定端口上在本地机器上并接受 SOCKS 连接,远程将用作出口节点。例如,您可以在本地浏览器中配置它,这样它将通过 SSH 隧道访问互联网,第三方(Web 服务器)将看到您的连接来自远程主机的 IP;除了 SSH 服务器(在这种情况下,它将看到跳转服务器的地址),没有人会看到您的“真实”IP。要设置在配置中,您使用DynamicForward配置文件中的选项。

相关内容