linux - 如何使用 autossh 获得持久的反向 SSH 隧道?

标签 linux ssh connection

我设法在 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 ksproxy@37.xxx.yyy.zzz

在服务器上(具有静态 IP 的那个):

ksproxy@37.xxx.yyy.zzz:~$ ssh rspi@localhost -t -p 20000
rspi@localhost's password:
rspi@antlia:~ $

所以一切正常:我输入密码,然后我得到一个终端/提示符。

我什至可以从桌面访问 Raspberry Pi(首先通过服务器),执行以下操作:

ssh -t ksproxy@37.xxx.yyy.zzz "ssh rspi@localhost -p 20000"
ksproxy@37.xxx.yyy.zzz password:
rspi@localhost's password:
...
rspi@antlia:~

它首先询问服务器的密码,然后询问 Pi 的密码,一切正常。

到目前为止一切顺利。

现在我尝试相同但这次使用 autossh:

rspi@antlia:~ $ autossh -M 20000 -N -i /home/rspi/.ssh/id_rsa ksproxy@37.xxx.yyy.zzz

ksproxy@37.xxx.yyy.zzz:~$ ssh rspi@localhost -p 20000

这个“有效”,但它只是卡在那里,什么都不做。

我尝试“-vvv”ssh 命令的输出,但它只是显示没有任何反应。

如果我尝试另一个端口,它会失败:

ksproxy@37.xxx.yyy.zzz:~$ ssh rspi@localhost -p 1234
ssh: connect to host localhost port 1234: Connection refused

如果我尝试正确的端口 (20000) 但这次使用 -t 参数,同样的事情:它“有效”但我没有得到任何终端/提示。

这是 -vvv 的输出

ksproxy@37.xxx.yyy.zzz:~$ 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 工作更脆弱)。

最佳答案

autossh -N-L-R 或任何其他转发都不会建立永久的 ssh 连接确实做的不多。您需要为 autossh 提供相同(或可比较)的参数。

关于linux - 如何使用 autossh 获得持久的反向 SSH 隧道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35673005/

相关文章:

ssh - 如何通过ssh从一个ec2实例连接到另一个ec2实例

postgresql - VPS 上的 OpenERP,以及 Postgresql 到本地机器的重定向

python - 远程连接到 Elasticsearch 时连接被拒绝

python - 没有得到 LD_LIBRARY_PATH

mysql - 为什么即使我从另一台服务器复制该表的所有文件,数据库表也没有更新?

ssh - 如何通过ssh禁用root密码登录,同时允许基于证书的登录

JavaEE 项目部署失败

php - 在php中使用存储过程哪个是最好的mysql连接方法?

linux - 如何在没有 root 用户的情况下使用自动依赖处理在 Linux (CentOS) 中安装软件包?

linux模式匹配程序输入