(刚刚在 SO 上问了这个问题,但被建议在这里问)
我成功地在 Raspberry Pi 2 和我的服务器(具有静态 IP 的服务器)之间创建了反向 SSH 隧道,并且运行正常。我在服务器上使用的用户帐户称为“ksproxy”(它实际上不是“代理”,但无论如何)。
现在我也在尝试autossh
(从 Debian / Raspbian 包autossh
)来工作,但我没有成功。我可能已经接近成功了。
(我已在此问题中更改了真实 IP,以便37.xxx.yyy.zzz
不发布服务器的实际 IP)
以下是可以正常工作的内容:(无 autossh)
在 Rpi 上:
rspi@antlia:~ $ ssh -N -R 20000:localhost:22 [email protected]
在服务器(具有静态IP的服务器)上:
[email protected]:~$ ssh rspi@localhost -t -p 20000
rspi@localhost's password:
rspi@antlia:~ $
所以一切正常:我输入密码并得到一个终端/提示。
我甚至可以从我的桌面访问 Raspberry Pi(首先通过服务器),执行以下操作:
ssh -t [email protected] "ssh rspi@localhost -p 20000"
[email protected] password:
rspi@localhost's password:
...
rspi@antlia:~
它首先询问服务器的密码,然后询问 Pi 的密码,一切正常。
到目前为止,一切都很好。
现在我尝试同样的事情,但这次使用 autossh:
rspi@antlia:~ $ autossh -M 20000 -N -i /home/rspi/.ssh/id_rsa [email protected]
[email protected]:~$ ssh rspi@localhost -p 20000
它“有效”但它只是卡在那里,什么也不做。
我尝试“-vvv” ssh 命令的输出,但它只是显示什么都没有发生。
如果我尝试另一个端口,则会失败:
[email protected]:~$ ssh rspi@localhost -p 1234
ssh: connect to host localhost port 1234: Connection refused
如果我尝试正确的端口(20000)但这次使用参数-t
,则会出现同样的事情:它“有效”但我没有得到终端/提示。
这是-vvv
输出
[email protected]:~$ ssh -vvv rspi@localhost -t -p 20000
OpenSSH_6.7p1 Debian-5+deb8u1, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [127.0.0.1] port 20000.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/ksproxy/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/ksproxy/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
...
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u1
它没有要求输入密码,也没有显示任何终端/提示。
我在这里不明白什么或者做错了什么?
请注意,我不认为这是一个防火墙问题,因为“非 autossh”方法工作正常(但我没有获得自动“始终启动”/重新连接功能)。我真的很想让 autossh 工作(我知道我可以找到一种解决方法,比如某个 crontab 自动重新启动我的手动 SSH 隧道,但这可能比让 autossh 工作更脆弱)。
答案1
$ autossh -M 20000 -N -i /home/rspi/.ssh/id_rsa [email protected]
...
$ ssh rspi@localhost -p 20000
在这种情况下,您没有使用 ssh-R
选项来设置反向隧道;而是指定 autossh-M
选项。autossh -M 参数导致 autossh 在该端口上设置隧道,autossh 会将其用于自己的目的(定期测试 SSH 链接是否仍在工作)。它不等同于 ssh -R 参数。在这种情况下,当您连接到端口 20000 时,您将连接到 autossh 的私有连接测试端口。
您应该继续使用 ssh 的 -R 选项指定所需的反向隧道。如果您想使用 autossh 的 echo 端口功能,您应该在不同的端口上运行它:
$ autossh -M 20002 -N -R 20000:localhost:22 [email protected]