Skip to content

通过 SSH 密钥登录服务器

约 1152 字大约 4 分钟

SSHLinux

2025-01-15

省流:用户配置密钥请直接从第三节开始。

1. 介绍

1.1 密钥是什么

密钥(key)是一个非常大的数字,通过加密算法得到。对称加密只需要一个密钥,非对称加密需要两个密钥成对使用,分为公钥(public key)和私钥(private key)。

SSH 密钥登录采用的是非对称加密,每个用户通过自己的密钥登录。其中,私钥必须私密保存,不能泄漏;公钥则是公开的,可以对外发送。它们的关系是,公钥和私钥是一一对应的,每一个私钥都有且仅有一个对应的公钥,反之亦然。

如果数据使用公钥加密,那么只有使用对应的私钥才能解密,其他密钥都不行;反过来,如果使用私钥加密(这个过程一般称为“签名”),也只有使用对应的公钥解密。

1.2 密钥登录的过程

SSH 密钥登录分为以下的步骤。

预备步骤,客户端通过 ssh-keygen 生成自己的公钥和私钥。

第一步,手动将客户端的公钥放入远程服务器的指定位置。

第二步,客户端向服务器发起 SSH 登录的请求。

第三步,服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。

第四步,客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。

第五步,服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。

2. 设置 SSH,打开密钥登录功能(管理员)

编辑 /etc/ssh/sshd_config 文件

user@user:~/.ssh$ sudo vim /etc/ssh/sshd_config

加入如下设置:

RSAAuthentication yes
PubkeyAuthentication yes

另外,请留意 root 用户能否通过 SSH 登录:

PermitRootLogin yes

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

PasswordAuthentication no

最后,重启 SSH 服务:

user@user:~/.ssh$ sudo service sshd restart

3. 用户制作密钥对

3.1 制作密钥对

本地电脑的 cmd 使用下面命令建立密钥对:

ssh-keygen -t rsa

输入下面的命令以后,ssh-keygen 会要求用户回答一些问题。

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。

当然,也可以留空,实现无密码登录,懒人直接按三次 Enter 即可。

C:\Users\AJohn\.ssh>ssh-keygen -t rsa # <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\AJohn/.ssh/id_rsa): # <== 按 Enter
Enter passphrase (empty for no passphrase): # <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: # <== 再输入一遍密钥锁码
Your identification has been saved in C:\Users\AJohn/.ssh/id_rsa # <== 私钥
Your public key has been saved in C:\Users\AJohn/.ssh/id_rsa.pub # <== 公钥
The key fingerprint is:
SHA256:***************** ajohn@DESKTOP
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|                 |
|                 |
|   + .  S  .     |
|  + = ==.oo      |
| . . B**ooo.     |
|  . *++B+.=.o .  |
|  .*===+BB+*ooE. |
+----[SHA256]-----+

C:\Users\AJohn\.ssh>

rsa 算法会生成两个密钥文件: ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。

3.2 查看公钥内容

可以前往文件所在位置,使用记事本打开,也可以通过本地电脑 PowerShell 使用命令:

cat ~/.ssh/id_rsa.pub

来查看公钥内容:

ssh-rsa AAAAB3Nza********= ajohn@DESKTOP

末尾的 ajohn@DESKTOP 是公钥的注释,用来识别不同的公钥,表示这是哪台主机(DESKTOP)的哪个用户(ajohn)的公钥,不是必需项。

请保留窗口打开,一会需要复制公钥到服务器。

3.3 上传公钥到服务器

服务器创建目录:

mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys

将下行的 ssh-rsa AAAAB3Nza********= ajohn@DESKTOP 替换成你的公钥后,在服务器执行写入:

echo "ssh-rsa AAAAB3Nza********= ajohn@DESKTOP" >> ~/.ssh/authorized_keys

3.4 VSCode 配置

本地电脑 VSCode 中配置密钥登录路径 IdentityFile C:\Users\AJohn\.ssh\id_rsa ,注意是私钥。

Host ************
  HostName ************
  User ***
  IdentityFile C:\Users\AJohn\.ssh\id_rsa

配置完成后,即可免密登录

提示

配置文件位于 C:\Users\AJohn\.ssh\config

VSCode 中打开配置文件,只需点击左下角小蓝框-连接到主机-配置SSH主机-第一个 C:\Users\AJohn\.ssh\config 就是。

参考资料: