A端:内网设备
B端:转发设备
C端:外网设备
参数介绍
反向代理
ssh -fCNR
正向代理
ssh -fCNL
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
A端配置
设置方法
A上设置反向代理
建立B端到A端的反向代理,具体指令为
ssh -fCNR [B端IP或省略]:[B端端口]:[A端IP]:[A端端口] [登陆B端的用户名@B端IP]
我们使用B端的20122端口,以及A端的22端口,指令如下:
ssh -fCNR 20122:localhost:22 mhming@192.168.1.111
ssh -fCNR 20123:localhost:20023 mhming@192.168.1.111
说明:这里的本地端口设置为20023与B端转发端口保持一致是为了远程调用gdbserver,不然在使用GDB调试时会出现连接不上的情况
A端增加路由
route add -net 192.168.50.0/24 eth0
B端配置
B端设置正向代理
建立B的正向代理,用来做转发,具体指令为
ssh -fCNL [可访问IP或*]:[B端端口1]:[B端IP]:[B端端口2] [登陆B端的用户名@B端IP]
说明:这里的B端端口2和上面的B端端口是一致的,端口20022的也是B端。
ssh -fCNL *:20022:localhost:20122 localhost
ssh -fCNL *:20023:localhost:20123 localhost
允许端口访问
sudo ufw allow 20022
sudo ufw allow 20023
说明:这里端口20022和20023是B端的转发端口,也就是外部网络数据接入端口,然后将数据转发到内网的20122和20123端口,实现外网到内网的互通。
C端连接测试
终端测试
ssh -p 20022 A端用户名@B端外网IP
使用内网A端用户名和密码和B端外网IP登录到A端内网的设备。
DS-5登录测试
注意更改登录端口为指定端口:20022

A端免密码登录到B端内网设备
在A端进行如下操作:
生成ssh公钥
ssh-keygen
将生成的公钥拷贝到A端目录下
ssh-copy-id A端用户名@A端IP
注意:嵌入式操作系统该指令被裁剪的情况下可以手动将A端公钥(一般存放在:/.ssh/id_rsa.pub)拷贝到B端的自动认证密钥文件下面(B端:/.ssh/authorized_keys)。
获取秘钥文本
cat ~/.ssh/id_rsa.pub
然后将秘钥文本拷贝添加到B端自动秘钥文件下面即可。
B端本地SSH免密码自动登录设置
参考上述方法获取B端公钥并增加到B端自动秘钥文件下面即可。
A端反向代理自启动配置方法
由于本文所述ARM端版本有点旧,没有systemctrl或者service命令,添加自启动方法如下:
1、运行下面的指令查看系统启动等级
runlevel
得到结果如下:
N 5
对应修改rc5.d里面的启动脚本
vi /etc/rc5.d/S99stop-bootlogd
在末尾exit 0之前增加上述反向代理命令即可

如果有systemctrl命令,可将下面的脚本创建文件:ssh-port-forward.service
[Unit]
Description=SSH port forward for robot ssh service and gdb debug
After=sshd.service
[Service]
User=root
Group=root
ExecStart=/usr/bin/ssh -fCNR 20122:localhost:22 mhming@192.168.1.111
[Install]
WantedBy=multi-user.target
Alias=ssh-port-forward.service
将该文件放在目录 /lib/systemd/system 下,然后执行 systemd 的配置加载、命令启动和开机自启动命令:
$ sudo systemctl daemon-reload
$ sudo systemctl start ssh-port-forward.service
$ sudo systemctl enable ssh-port-forward.service
B端正向代理自启动配置方法
方法与上述一致,注意指令内容即可。
Ubuntu20.04设置开机自启动
0x01创建rc.local
ubuntu-18.04以后 默认是没有 /etc/rc.local 这个文件的,需要自己创建
sudo touch /etc/rc.local
0x02写入开机自启的脚本
#!/bin/sh
echo "看到这行字,说明添加自启动脚本成功。" > /usr/local/test.log
exit 0
0x03给rc.local加执行权限
sudo chmod +x /etc/rc.local
0x04链接配置文件
systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接
ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/
网友评论