1. 前言

​ 已经2022年了,看到很多朋友还在使用Putty、MobaXTerm之类的软件,ssh连接到自己的各种linux开发板、服务器等。每次都要回忆IP地址、用户名、密码。如果要传输文件,scp又要又要输一遍IP地址、用户名、密码。整个搞下来,精神聚焦不了,烦躁程度直线上升。

​ 今天把最方便的ssh使用方式分享给大家。先放一个演示效果如下:

(1)在Linux shell终端,或者Windows Git Bash中,直接输入ssh <主机名>,就可ssh连接到指定主机,无需输入密码.

image-20221214193456382

上图为Windows11 Terminal中打开的Git Bash

(2)scp远程拷贝,也只需主机名,无需用户名、密码:

image-20221214193918641

注:我的远程主机是OpenWrt,没安装sftp,所以这里scp要加-O参数。一般支持sftp的可以不加-O参数。

(3)VS Code Remote,直接选择远程主机,无需密码

image-20221214194243898

image-20221214194211714

注:VS Code Remote要求对方主机要有glibclibstdc++,实际上OpenWrt的C运行库是musl,是不能用VS Code Remote连的,我这里只是展示一下。

​ 大部分开发板的Linux系统都是可以使用VS Code Remote的

2. 配置

2.1. 创建密钥对

​ 使用密钥对而非账户密码来进行ssh连接。这里先生成密钥对

ssh-keygen -t ed25519 -C "xxxx@xxx.com" -f ~/.ssh/my_ed25519
# 一路回车即可,不要输入任何内容

​ 参数说明:

  • -t:加密算法,目前推荐ed25519,rsa已经不够安全
  • -C:备注信息,写一些明文备注,可以写任何东西,让你记得这是个啥。如果是GitHub的密钥,则需要输入本地git邮箱。
  • -f:存放私钥的文件,会新建一个文件,建议放在~/.ssh/

​ 创建完毕后,会发现.ssh目录下有公钥和私钥文件,其中带.pub后缀的是公钥:

image-20221214195611976

2.2. 安装公钥到远程主机

​ 把公钥安装到远程主机,输入以下命令,最后填入你自己的填入远程主机用户名和IP地址:

ssh-copy-id -i ~/.ssh/my_ed25519.pub root@192.168.2.1

参数说明:

  • -i:公钥文件

第一次安装会要求你输入密码,输入密码后即为安装成功

2.3. 配置ssh

​ 修改~/.ssh/config,如果没有就创建一个新的,内容示例如下:

Host aliyun
HostName xxx.xxx.xxx.xxx
User root
Port 22
IdentityFile ~/.ssh/id_ed25519_aliyun
Host google
HostName xxx.xxx.xxx.xxx
User ubuntu
Port 22
IdentityFile ~/.ssh/ds.txt
Host r5s
HostName 192.168.2.1
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
  • Host:命名,可以随便取名英文字母+数字+下划线
  • HostName:主机名,可填IP地址或域名
  • User:用户名
  • Port:端口号,如果不配置,默认是22
  • IndentityFile:私钥文件,必须是与前一步安装的公钥成对的私钥文件

2.4. 测试

直接使用config中命名的别名就可以进行ssh连接,无需输入密码,例如:

image-20221214193456382

3. 其他相关话题

3.1. VS Code Remote

​ 直接在插件商店搜索remote,安装remote开发合集即可,会自动安装remote ssh等:

image-20221214200636992

​ 然后点击左下角即可开始选择远程主机:

image-20221214200752517

image-20221214194211714

​ 第一次连接,需要选择是Linux/Windows/Mac OS,然后VS Code会自动在对方主机上编译安装服务端,需要对方主机上有C++环境。需要等待一段时间:
image-20221214201022079

​ 安装完毕后,在VS Code中打开文件夹,就像在本地一样操作,左侧文件栏是可以拖放文件的:

image-20221214210243472

3.2. 固定IP地址

​ 现在家用网络很少用静态IP了,而是路由器通过DHCP服务自动给设备分配IP地址。但是我们希望:

  • 自己在家调试时,开发板不要每次上电IP地址就变化
  • 不要在开发板上配置静态IP,不然把板子带到其他地方去联网就又要重新配置动态获取IP了

​ 解决方法是,DHCP客户端(板子)仍然申请IP,但是DHCP服务器(路由器)只会分配固定的IP地址给它。

DHCP静态分配与“静态IP”不是一个概念,但可以达到我们希望IP地址不变的效果

​ 路由器管理页面种类很多,但是原理都是相通的,这里以OpenWrt为例:

(1)选择 “网络”——“DHCP/DNS”

image-20221214202240725

(2)可以看到已分配的IP地址,找到你的开发板,记住MAC地址:

image-20221214202411249

(3)在下方,“静态地址分配”中,选择“添加”,然后给MAC地址绑定一个固定的IP地址即可,主机名可以随便取个名,也可以不填:

image-20221214202548591

(4)页面中选择“保存&应用”即可:

image-20221214202711815

注意:

​ DHCP静态绑定,并不是说这个IP地址就不会被其它设备动态获取到了。只要这个IP在动态IP池子里,就有可能在被绑定的设备不在线时,动态分配给其他设备。

​ 为了避免这种情况,我们做DHCP静态分配时,最好把静态分配的地址放在动态分配地址池之外。

​ 以我的OpenWrt为例:

​ 在“网络”——“接口”——“LAN接口配置修改”中,可以看到DHCP服务器的设置:

image-20221214205402842

​ 可以看到基址是100,范围是150.由于我的LAN网段是 192.168.2.0/24,所以动态地址池的分配范围就是192.168.2.100 ~ 192.168.2.250.

​ 所以前面做DHCP静态绑定时,IP地址设在这个范围之外即可。