Ssh
打開 autossh 埠以供公共訪問
我想通過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