0%

通过云主机远程登录(ssh)树莓派

一、实现步骤概览

二、实现步骤具体操作

1. 安装 autossh (树莓派端)

sudo apt-get install autossh

2. 生成ssh-key,开启免密登录(树莓派端)

2.1 生成 key

1
ssh-keygen

输入以上命令,然后一路Enter,最后会在 ~/.ssh/ 下生成key。

2.2 拷贝到云主机

1
ssh-copy-id -i username@云主机-ip

2.3 拷贝public key,以备后续使用。

1
cat ~/.ssh/id_rsa.pub 

选择、复制。

3. 配置免密登录(云服务端)

其实在第二步中拷贝 ssh key 到云应该就OK了,但在腾讯云主机上发现不行,需要在控制台手动添加ssh key,然后再绑定 key 到相应实例,此过程需要重启。

4. 测试能否通过ssh 免密登陆云主机(树莓派端)
1
2
ssh username@云主机-ip 

如果能免密登录,则进行后续操作,否则查找原因,直到能正常登录为止。

5. 安装 autossh 守护进程服务 (树莓派端)

下载已经整理好的的脚本(Github地址),修改里面的云主机 username 和 IP, 然后 sudo ./install.sh 安装服务。

下面重点介绍下 autosshd.sh脚本,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 #!/bin/bash

device_id=$(cat /etc/ble-ap/bytedance-ap.conf | grep devicename | awk -F "BDAFM" '{print $2}')
port_offs=$((16#$device_id))

let "local_port=port_offs+10000"
let "remote_port=port_offs+20000"

echo $local_port
echo $remote_port

killall autossh

/bin/su -c "/usr/bin/autossh -M $local_port -o "ExitOnForwardFailure=yes" -NR $remote_port:localhost:22 root@111.231.221.20" - pi

exit 0

-M $local_port 参数为本机(树莓派)监视ssh状态的端口。
$remote_port:localhost:22 是把云主机的端口(rmote_port )映射到本机(树莓派)的 22 端口,即 ssh 端口。

如果没有使用配置文件可以直接填写端口值就OK了,如:

1
/bin/su -c "/usr/bin/autossh -M 12020 -o "ExitOnForwardFailure=yes" -NR 120201:localhost:22 root@111.231.221.20" - pi
6. 远程登录树莓派

6.1 使用任意 PC 登录云主机
6.2 在云主机里使用 ssh -p 120201 pi@localhost

注:为了避免每次密码也可以将云主机的key,ssh-copy-id到树莓派(参考前面第二步)。