怎样通过外网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访问树莓派的主要内容,如果未能解决你的问题,请参考以下文章

树莓派 --- 创建多个用户并实现用户从外网访问

怎么让树莓派建立局域网ip访问ssh

远程连接树莓派-ngrok

有没有办法让树莓派开机自动启动热点(没有外网)

怎样给树莓派设置静态IP

树莓派远程通信(可外网访问)