macOS Catalina 上的 SSH ProxyJump 不起作用

macOS Catalina 上的 SSH ProxyJump 不起作用

我有 3 台电脑:
1. 我的 Mac 装有 macOS Catalina
2. 我的第一台 Raspberry Pi
3. 我的第二台 Raspberry Pi

我的 Mac 上的 ssh 运行版本:OpenSSH_8.1p1、OpenSSL 1.1.1d 2019 年 9 月 10 日

我能够通过 ssh 分别登录每个 Raspberry Pi。

我想通过跳过第一台 Pi 来从我的 Mac SSH 到第二台 Pi。像这样:

+-------+       +--------+       +--------+
|  Mac  | ----> | raspi1 | ----> | raspi2 |
+-------+       +--------+       +--------+

使用这个 .ssh/config 文件:

Host 1pi
    HostName raspi1
    User pi
    #IdentityFile ~/.ssh/id_ed25519

Host 2pi
    HostName raspi2
    User pi
    ProxyJump 1pi
    #IdentityFile ~/.ssh/id_ed25519

虽然我能够登录到第一个 Raspberry Pi,但是尝试登录到第二个 Pi 时总是出现同样的错误。

$ ssh 2pi
kex_exchange_identification: banner line contains invalid characters

我甚至尝试使用 IdentityFile 参数并仅使用 -J 选项。但结果仍然相同。

$ ssh -J pi@raspi1 pi@raspi2
kex_exchange_identification: banner line contains invalid characters

我在 macOS Mojave 上试过,成功了。我在 Linux 上试过,成功了。

如何让它在 macOS Catalina 上运行?如何从第一个 Pi 跳转到第二个 Pi?

当我这样做时,ssh 2pi -vv我得到了这个(以及其他调试信息)

debug2: channel_input_open_confirmation: channel 0: callback start
debug2: channel_input_open_confirmation: channel 0: callback done
debug2: channel 0: open confirm rwindow 2097152 rmax 32768
debug1: kex_exchange_identification: banner line 0: \033[H\033[2JSSH-2.0-OpenSSH_7.9p1 Raspbian-10+deb10u1
kex_exchange_identification: banner line contains invalid characters
debug1: channel 0: free: direct-tcpip: listening port 0 for raspi2 port 22, connect from 127.0.0.1 port 65535 to UNKNOWN port 65536, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Killed by signal 1.

答案1

OpenSSH_8.1p1 有一个错误,它将%n和交换了%h。由于ProxyJump本质上使用ProxyCommand ssh -W %h:%p,因此它实际上发送的是Host名称而不是HostName1pi而不是raspi1)。

如果您不想费力安装 OpenSSH_8.2p1 或其他任何版本,您可以将其替换ProxyJump 1piProxyCommand ssh -W %n:%p 1pi,直到 Apple 替换 OpenSSH 版本。考虑到 Apple 是报告该错误的人(感谢 Pierre-Olivier),我假设它将在下一个 10.15.4 Beta 中更新。

如果您对源代码感兴趣,可以在此处找到该错误:https://github.com/openssh/openssh-portable/commit/fbe24b142915331ceb2a3a76be3dc5b6d204fddf#diff-5bfa45f3fb322e569a8101399c9c551cR1372

该错误已在此处修复:https://github.com/openssh/openssh-portable/commit/2ab335712d084d9ccaf3f53afc3fa9535329da87#diff-5bfa45f3fb322e569a8101399c9c551cR1395


作为上述答案的替代,有一个可能更简单的答案可以解决您的问题,并且当 Apple 发布修复程序时不会让您更改任何内容。

只需将其添加2pi到您的/etc/hosts文件中raspi1即可。例如{IP address of 2pi} 2pi。假设您的 IP 地址是 192.168.1.10,则它将是:

echo "192.168.1.10 2pi" | sudo tee -a /etc/hosts

相关内容