我知道许多人很早就被ssh的密码登录所困扰, 这个问题也是网上最常见的问题, 文笔有限 就不从原理展开了.

原理请看这里

有以下几个基本过程

生成密钥对

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
~ ❤  ssh-keygen -t rsa -b 4096 -C "corvo@X1C"
Generating public/private rsa key pair.

# 可以自行选择存储位置
Enter file in which to save the key (/home/corvo/.ssh/id_rsa): /home/corvo/.ssh/id_rsa_test

# 这里的口令可以填的简单一些, 但是最好不要留空哈
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

## 生成的密钥对位置
Your identification has been saved in /home/corvo/.ssh/id_rsa_test.
Your public key has been saved in /home/corvo/.ssh/id_rsa_test.pub.
The key fingerprint is:
SHA256:/0Iwzha+UE/NmtqwVcLhjfyQs6RmBlNv5vTsPxFuKC4 corvo@X1C
The key's randomart image is:
+---[RSA 4096]----+
| |
| . . |
| . = B |
| o = ^ = . |
| BS& % o . |
| . @.X = + |
| * X.o . . |
| E +.. . |
| . ..... |
+----[SHA256]-----+

将公钥拷贝到你想远程登录的机器上

请注意, 拷贝的是公钥. 按照上面生成的文件来看, 你要拷贝这个文件 /home/corvo/.ssh/id_rsa_test.pub(带有pub后缀)

文件拷贝到什么地方呢? 这里需要搞清楚两件事情, 你想登录哪台主机, 登录的用户是哪一个? 登录的主机自不必说, 确定用户后, 你要在用户的家目录cd ~, 下面 ~/.ssh/authorized_keys文件中, 追加刚刚的公钥文件.

这里大家八仙过海, 各显神通了.

有几种思路:

  1. 直接打开终端连上去, 编辑这个文件, 把公钥拷贝过去.
  2. 使用ssh-copy-id, ssh-copy-id

最后的效果如下:

1
2
3
4
root@xxx ~/.ssh$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCvv8+Pazr2TyoOrZE0u6qvQIxncPm/cQKb7MpH6Uy0zFpmI0xkAerg4SukMx8jOVH8CvJ69zO3EE3KD+uTQLKytyNatsEV6Wwx31I3w/+p/7oIwAHHq1Cj9uY2AkQ/cPbxLL6+MAEJJAsuMVxwykCNSGJVKO1OICaXO/n196VHjG9QyVoGPjYzpXk0Ex2CsSZe+i4UlSQfo+BM4LoscrhC4veaXOw6gwXMp5L3mQm7aquT+ps7dWtGS78u4cUbsBJYUPbzESUkwdsowl/z9hgfjEsLndXnmx6cua6PG2XRrV2P1ZO1bjvPro9fVHZreEAu7y71crex5p1MFps6/F0yzgiGatEpohHWqWhkDRn3d3xEV3W5PVBHPukI2cBJQ85uO2lMTgCNWohJBXt1Iy99TpTN0lofMQa53s9d2UlEHr7ueIKjmvGYI9/k8/invNylIgruTIcYDPMOIGgW1R5iICtsiZleo1RgRsd2QlR8kNTGJOmdHCxkpT8vlQMpFVc121c1GFJp9/DrFX7qr/hPda4P/bDzA6AKKt9XY+hcE/raWWrtF0PilSLL7OEyZi4VLVmtXHErpCRGFYT/aEzsfyybjf6mMAb21Ab8OO3WjFabUKDwBmYnnjXEoPrqRLet+oeEIDpan1dnHI4aMnEBA94XzM5tY6bRUhEjqMcY3w== corvo@X1C

root@xxx ~/.ssh$

简单的测试

添加了密钥登录, 总要进行测试的.

这里我着重说一下, 许多同学对ssh的使用太浅了 甚至都不去看看详细的输出, 遇到了问题, 请使用ssh -vvv打印出详细的信息, 如果实在解决不了再去请教别人, 这是一种美德.

密钥登录的调试, 可以使用-i参数指定密钥位置, 就比如我使用刚刚生成的私钥

1
~ ❤  ssh root@1.2.3.4 -i ~/.ssh/id_rsa_test

如果出现Permission denied (publickey)., 请加上-vvv参数.

1
~ ❤  ssh root@1.2.3.4 -i ~/.ssh/id_rsa_test -vvv