怎样通过外网ssh访问树莓派
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样通过外网ssh访问树莓派相关的知识,希望对你有一定的参考价值。
建立 树莓派 到 VPS 的反向代理【树莓派 上操作】ssh -fCNR :localhost:22 usr_b@B.B.B.B
为 VPS 上端口,用来与 树莓派 上的22端口绑定。
建立 VPS 上的正向代理,用作本地转发。做这一步是因为绑定后的 端口只支持本地访问【VPS 上操作】
ssh -fCNL *::localhost: localhost
为本地转发端口,用以和外网通信,并将数据转发到 ,实现可以从其他机器访问。
其中的*表示接受来自任意机器的访问。
现在在 Client 机器上可以通过 VPS ssh 到树莓派。
ssh -p usra@B.B.B.B
至此方案完成。
同理,也可以建立反向代理通过VNC来连接内网树莓派的图形界面。
附:
SSH 参数解释
-f 后台运行
-C 允许压缩数据
-N 不执行任何命令
-R 将端口绑定到远程服务器,反向代理
-L 将端口绑定到本地客户端,正向代理 参考技术A 如果没有VPS的话,可以使用端口映射软件holer,将树莓派sshd端口映射到公网,就可以从外网访问了。
树莓派远程通信(可外网访问)
一,配置树莓派
先装系统,这里网上教程比较多不在赘述了。
二,分配固定IP
这里方法有很多种,简述其中一种。装好系统盘后boot下有个名为cmdline.txt的文件,前面加上ip=想分配给树莓派的固定ip。(记得后面加个空格)
如图:
现在给树莓派插上网线会自动获取192.168.1.123这个ip。
注意:192.168.1.xx 是我路由器的网段,不一定适合所有人。可以在cmd输入ipconfig查看你电脑的ip。
举个例子:
可以看到此时我是WLAN连接,ip为192.168.1.105,子网掩码255.255.255.0所以此时的网段就是192.168.1.xx
如果子网掩码是255.255.0.0,那网段就是192.168.xx.xx
子网掩码只能是0或255
如果你的ip是10.1.1.23,子网掩码为255.255.255.0,给固定ip时要写10.1.1.x(x是你任意指定的值尽量在10-240)
三,内网穿透
由于此时我们的树莓派连的是局域网,可以访问公网,但无法通过公网访问树莓派实现远程控制与信息交互。所以要将我们的ip与端口映射到公网。这个网上有很多产品,每家的产品使用方法也不相同。但最后都会给你一个域名,一个端口。会将自己树莓派的ip和端口映射到他们端口(建议选择22端口号,是用于ssh连接的,也可以将ssh的22端口号改到其他端口,此时选择你改的端口号)。记好给的域名与端口号。
四,链接
方式1:putty连接
HostName输入给的域名(如果想填ip,可以通过命令:nslookup 域名 来解析域名的IP地址)
Port输入给的端口号(一般都几千以上)
点open,再输入你树莓派的用户名和密码即可。
方式2:
脚本连接:
这里找了一个比较好用的python脚本
文件上传下载:
import paramiko
trans = paramiko.Transport(
sock=("填写用nslookup解析出来的域名ip地址", 12345) #12345是分配给我的端口号,改成你的
)
trans.connect(
username="raspberry用户名",
password="raspberry密码"
)
sftp = paramiko.SFTPClient.from_transport(trans)
# 上传
# 把本地的文件单表替换加密.txt,上传到远端为/home/pi/test/1.txt
sftp.put("单表替换加密.txt", "/home/pi/test/1.txt")
# 下载
# 从远程/root/Desktop/hh.py获取文件下载到本地名称为hh.py
# sftp.get("/root/Desktop/hh.py","hh.py")
sftp.close()
python脚本输入命令:
import paramiko
# 创建一个ssh的客户端,用来连接服务器
ssh = paramiko.SSHClient()
# 创建一个ssh的白名单
know_host = paramiko.AutoAddPolicy()
# 加载创建的白名单
ssh.set_missing_host_key_policy(know_host)
# 连接服务器
ssh.connect( #与上面同理
hostname="IP",
port=12345,
username="用户名",
password="密码"
)
# 执行命令
stdin, stdout, stderr = ssh.exec_command("ls")
# stdin 标准格式的输入,是一个写权限的文件对象
# stdout 标准格式的输出,是一个读权限的文件对象
# stderr 标准格式的错误,是一个写权限的文件对象
print(stdout.read().decode()) #会输出ls的执行结果
ssh.close()
此刻,即使你与树莓派相隔万里,也能实时通信。
方式三
终端链接
ssh -p xx user@ip xx 为 端口号 user为用户名 ip为要登陆的ip
以上是关于怎样通过外网ssh访问树莓派的主要内容,如果未能解决你的问题,请参考以下文章