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
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
相关文章推荐
- Linux内核编译的一个错误解决 ump/common/ump_kernel_common.o
- CMakeFile命令之file
- EditText保留小数点后两位
- 连续特征进行离散化的方法介绍与应用例子
- 安卓5.0后 getRunningAppProcesses返回列表为null的处理方法
- 安卓5.0后 getRunningAppProcesses返回列表为null的处理方法
- IOS 将请求参数字典转换为参数字符串
- java:按行读取服务器压缩文件内容
- 设计模式 模板方法模式 TemplateMethod
- golang开发的一个mysql连接代理池,支持多种语言客户端(PHP范例)
- java condition使用及分析
- 三.linux学习笔记-文件搜索命令
- [Unity] 官方文档Execution Order of Event Functions
- iOS-AFNetworking-上传图片
- 列表页调取文章正文
- 19个必须知道的Visual Studio快捷键
- 【文本处理】Dele_SpaceTab_eveline
- 将int,bigint整型数值可逆转换字符串
- 从重载与重写来看OOP的三大特性:继承、多态、封装。
- 优化SQL查询:如何写出高性能SQL语句