0%

SSH on RaspberryOS

今天在工作室折腾了一顿树莓派,这个小玩意从去年买回来在我手里一直吃灰,就借给了学长,最近刚重新拿回来
树莓派 4B 刷的是树莓派官方的 Raspberry OS GUI 系统,在系统设置里可以直接开启 SSH 登陆权限
目前的想法是把它放在工作室,可以长年不断电放着。如果能分配一个静态 ip,就可以当作工作室的一个小型(迷你)服务器用
一方面可以提供大家简单的 linux 学习实践,另一方面如果进行内网穿透,就可以给工作室搭建一个博客之类的
今天没给他做内网穿透,因为目前对他的期望还不是很稳定,一些东西也还没开始尝试。可能会在一段时间的试用之后再重新给它分配一个合理的定位吧


分配静态 ip

之前在折腾家里的小米 AX1800 的时候就有看到 DHCP 动态分配 ip,之前就去多少了解了一点关于动态分配 ip 地址的东西
如果不是有配套软件的话,一般在路由器的底面会有它进行设置的 ip 地址或网址
工作室现在用的是 tp-link 的路由器,也比较老旧了,通过 tplogin.cn 对路由器进行设备管理
因为 DHCP 之前没有在家里进行设置过,看小米的那个界面,让我以为在路由器的管理页面可以进行单独的静态 ip 设置,但是在 tp-link 的管理页面找了很久也没找到
后来就想到当时一个哥哥给我展示的他给自己的 mac 设置静态 ip,是在系统偏好设置里,也就是需要进行静态分配的主机上直接进行设置
从道理上讲,DHCP 是路由器要做的事情,也理应在路由器上直接进行分配;但是再想想,路由器为什么要记住每台设备信息,以让它每次接入的时候都被分配到或许它一年前在自己这里记录下的 ip 地址呢
也就是说,静态 ip 的设置工作应该是在要被分配的主机上进行设置
这里截个计算机网络上课的图

DHCP 过程第一步是由主机进行 DHCP Discover,在当前局域网中进行广播,由路由器,也就是 DHCP Server 进行反馈
如果在第一步主机的 DHCP Discover 广播的时候直接说我的配置文件里说我想要分配一个静态的 ip,希望你们不要不识抬举,那么 DHCP 过程也就能转变成一个静态 ip 的分配了

所以,我们需要做的是在树莓派上进行静态 ip 的配置
通过查询,配置过程如下

1
2
3
route -n    # 得到 routers
cat /etc/resolv.conf # 得到 nameserver
sudo vim /etc/dhcpcd.conf # dhcp 配置文件

在配置文件中找到它所提供的静态 ip 模板,按照刚才得到的结果进行修改

1
2
3
4
interface wlan0
static ip_address=192.168.1.120 # 我给树莓派分配的 ip
static routers=192.168.1.1 # route -n 查询到的
static domain_name_servers=202.118.66.6 # resolv.conf 查询到的

一开始我一直没有分配成功,最后发现过程中有以下几个问题:

  1. 不要太相信路由器。我一开始每次检验是否分配成功是同时通过路由器的管理页面里的 ip 查询列表和我直接 ssh / ping 旧 ip 和新 ip 来进行判断的,但是后来发现,路由器的 ip
    列表在我分配成功之后仍然写的是旧的 ip,目前还没搞懂是什么原因。按照 DHCP 的协议,即便 DHCP Server 反馈的是旧 ip 的 DHCP offer 也不应该被主机返回 request 确认啊
  2. 配置里的 wlan0 是要改的,一开始没怎么关注这一行,本身模板里这个位置是有东西的
  3. cat 到的 resolv.conf 文件里,第二个 nameserver 是 192.168.1.1,这个可能是不可用的,因为在我参考的文章里,他的两个 nameserver 和 routers
    是完全不一样的。当然,也可能这个并没有什么问题
  4. ipv6 地址在模板里是有的,但是我最终还是去掉了 ipv6 的地址,仅仅是为了减小出错的可能。现在 ipv4 与 ipv6 共存,其实对于这个小小的树莓派来说,没什么使用 ipv6 的必要,它仅仅在内网中使用

在这期间,还玩了会 traceroute,发现了点之前没发现的东西

公私钥免密登陆

这个其实就比较简单了,了解一下 RSA 加密即可(安全概论快考试了 😭
我想要让我的电脑能免密 SSH 登陆树莓派,需要在我的主机上先生成公私钥对,然后再把 public key 传给树莓派。当然,内部关于怎么传送的,我确实还不了解它使用的是我学过的方式还是怎样,至少简单的操作指令就可以完成复杂的操作

1
2
ssh-keygen -t rsa
ssh-copy-id pi@192.168.1.120

对于大部分人来说,只需要知道这两条简单的指令就可以实现免密登陆了就可以
私钥会存储在 ~/.ssh,和一开始的 known_hosts 放在一起,公钥应该也会通过一些加密形式传送给我的 Raspberry Pi,同样存储在 ~/.ssh 目录下
私钥 id_rsa 公钥 authorized_keys
我们在指令中主动选择了使用 RSA 加密
最后。我直接把 .ssh 文件压缩放在了工作室的群里,根据我的设想,任何下载它的人都可以无需配置,免密登陆树莓派进行 linux 练习
当然,我知道把私钥直接交给别人是不对的,只能希望它仅在工作室内部交换吧


后续

树莓派现在放在工作室里不断电运行了,关闭了图形界面,不再接显示器之后经过长时间运行它也不会有发热的情况
现在给它通过花生壳做了内网穿透,可以分别在 工作室的网络下、校园网下、外网下 都有合适的接入方法
通过这一个个人的小项目,让我对一些东西的理解加深了好多。每次折腾一些自己喜欢的东西,都有新的收获
关于子网、内网穿透、DHCP、公私钥证书、Linux 的一些知识,甚至说对工作室的电脑都有了更多了解
从我的角度来说,这种学习方式要比学校里墨守陈规的教学好得多,我也相信有很多人也和我一样,对自己感兴趣的东西会抱有12分的热情,愿意拿出时间来折腾他们,并且在折腾的过程中会学习到很多有用的知识

Welcome to my other publishing channels