Ssh

打開 autossh 埠以供公共訪問

  • September 8, 2019

我想通過NAT traversal 訪問本地網路上的 Raspberry Pi Zero W。我正在關注本教程(中文),但遇到了下面描述的問題。

這個想法是將本地 Raspberry Pi 上的 SSH 埠轉發到具有公共 IP 的遠端機器,然後從那裡訪問 Pi。出於安全原因,我已將實際值替換為nalzok@remote-ip.

在 Raspberry Pi 上(從本地網路訪問)

pi@nalzoks-pi:~ $ autossh -M 30000 -o "StrictHostKeyChecking=false" -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" -NR 20000:localhost:22 nalzok@remote-ip

在遠端伺服器上

我從遠端伺服器登錄到 Pi 沒有問題

nalzok@iZuf68c45z6sk19lln4zvsZ:~$ ssh -p20000 pi@localhost
Linux nalzoks-pi 4.19.66+ #1253 Thu Aug 15 11:37:30 BST 2019 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Sep  8 10:12:30 2019 from ::1
pi@nalzoks-pi:~ $

在我的電腦上(本地網路之外)

但是,我無法直接從我的電腦訪問它。

$ ssh -p20000 pi@remote-ip
ssh: connect to host remote-ip port 20000: Connection refused

在遠端伺服器上

我很確定防火牆已為遠端伺服器上的埠 20000 和 30000 打開。在嘗試解決自己的問題時,我意識到這些埠僅可用於本地訪問。

nalzok@iZuf68c45z6sk19lln4zvsZ:~$ sudo lsof -i -P -n | grep LISTEN
[sudo] password for nalzok:
sshd        601    root    3u  IPv4  13223      0t0  TCP *:22 (LISTEN)
sshd      12503    root    8u  IPv4 879255      0t0  TCP 127.0.0.1:1234 (LISTEN)
sshd      13026  nalzok    9u  IPv4 885817      0t0  TCP 127.0.0.1:30000 (LISTEN)
sshd      13026  nalzok   10u  IPv4 885818      0t0  TCP 127.0.0.1:20000 (LISTEN)

如何打開 20000 埠供公眾訪問?

這種遠端轉發行為明確記錄在SSH 手冊頁中:

預設情況下,伺服器上的 TCP 偵聽套接字將僅綁定到環回介面。這可以通過指定一個 bind_address 來覆蓋。空的 bind_address 或地址“*”表示遠端套接字應偵聽所有介面。只有啟用了伺服器的 GatewayPorts 選項(請參閱 sshd_config(5)),指定遠端 bind_address 才會成功。

如果在伺服器上啟用了該GatewayPorts選項,您將像這樣指定遠端轉發以利用它:

-R *:20000:localhost:22

引用自:https://serverfault.com/questions/982380