SSH反向连接及Autossh 实现外网访问内网树莓派

需要一台vps服务器,树莓派连上vps,再通过vps来访问树莓派


1.在树莓派上设置
sudo screen -S sshtest
ssh -R 19999:localhost:22 你的vps用户名@你vps的ip      意思:将vps上的19999端口与树莓派的22端口绑定
输入你的vps密码,然后ctrl+a  ctrl+d把sshtest命令板后台运行
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session


2.在VPS上设置
ssh 你的树莓派用户名@localhost -p 19999
输入你的树莓派密码,这时,就可以在vps访问内网树的莓派了。




自动登录,断线重连:
这种方式不稳定,可能随时断开,断开后,需要树莓派再次连接vps,可以用autossh解决。
树莓派在使用autossh连接外网时,每次都需要输入密码,不能完全自动化,所以需要通过密钥验证用户身份,实现自动登录。
$ ssh-keygen
...(一直按Enter,最后在~/.ssh/下生成密钥)
$ ls ~/.ssh/
id_rsa id_rsa.pub known_hosts


将生成的id_rsa.pub公钥复制到vps主机上,并将内容加入到~/.ssh/authorized_keys中
$ cat id_rsa.pub >> ~/.ssh/authorized_keys


你可以直接执行下名命令,就不需要手动复制公钥文件了:
$ ssh-copy-id vps用户名@你vps的ip
这时,在树莓派上直接ssh vps用户名@vps的ip,直接会进入vps,不需要再输入密码了。


autossh -M 5678 -NfR 19999:localhost:22 vps用户名@vps的ip
-M 5678参数,负责通过5678端口监视连接状态,连接有问题时就会自动重连,-f参数使用程序后台运行

到这里,每次想访问家里树莓派时,直接登录vps上,再ssh 树莓派用户名pi@localhost -p 19999 输入树莓派密码即可访问家里PI了。






重启、开机自动启动autossh

/bin/su -c '/usr/bin/autossh -M 5678 -NfR 19999:localhost:22 vps用户名@vps的ip' - vps用户名
将上面命令放入下面各启动方式中,根据自己系统自己配置:
SysV:/etc/inid.d/autossh
Upstart: /etc/init/autossh.conf

systemd: /usr/lib/systemd/system/autossh.service


(我用上面的一直不好使,用了下面的好使了。

sudo vi /etc/rc.local 在exit 0前面输入:

autossh -M 5678 -NfR 19999:localhost:22 用户名@203.195.xxx.xxx -o BatchMode=yes -i /home/pi/.ssh/id_rsa

-o BatchMode不用输入yes,-i密钥的绝对路径

)

原因:

在/var/log/message里找到下面错误信息:

Apr 11 23:50:04 raspberrypi autossh[645]: ssh child pid is 662
Apr 11 23:50:04 raspberrypi autossh[645]: ssh exited with error status 255; restarting ssh

手动输入命令时,不带 -o -i,可以正常使用,但设置成开机启动时无法使用,输出上面的错误。命令可以去掉-f,用-v 查看debug信息,google查了一下,发现应该是没有带密钥信息的原因,因为开机时autossh使用的不是当前路径,所以必须得带上密钥的绝对路径。

类似问题:http://serverfault.com/questions/534229/autossh-in-background-does-not-work


猜你喜欢

转载自blog.csdn.net/a33445621/article/details/51097233