您的位置:首页 > 其它

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

2016-04-08 17:08 447 查看
需要一台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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: