Linux 的秘钥登录&&Xshell 配置Linux 秘钥登录
1.简介
为什么需要
登录Linux服务器的形式
- 基于口令,账号密码的登录方式:基于密码的登录,需要记住复杂的密码,且如果机器数量太多,难以使用密码进行管理
- 基于秘钥的认证方式:可以实现免密登录,减少运维人员的负担
至于公钥和私钥的加密/解密原理可以自行百度。。。
2.登录流程
客户端建立私钥和公钥,执行命令的方式也是客户端生成;私钥 (id_rsa) 与公钥 (id_rsa.pub) 后面会说到
-
客户端生成证书:私钥和公钥,然后私钥放在客户端,妥当保存,一般为了安全,访问有黑客拷贝客户端的私钥,客户端在生成私钥时,会设置一个密码(下面会演示两种,带密码和不带密码的),以后每次登录 ssh 服务器时,客户端都要输入密码解开私钥(公钥和私钥一般都保存在服务器上,如果工作中,你使用了一个没有密码的私钥,有一天服务器被黑了,你是跳到黄河都洗不清)。
-
服务器添加信用公钥:把客户端生成的公钥,上传到 ssh 服务器,添加到指定的文件中(~/.ssh/authorized_keys),这样,就完成 ssh 证书登录的配置了。
假设客户端想通过私钥要登录其他 ssh 服务器,同理,可以把公钥上传到其他 ssh 服务器。
流程步骤
公钥免密登录的过程如下
- 客户端发送自己的公钥给服务器(客户端保留私钥,从命令行从私钥中提取公用RSA密钥,也就相当于有了私钥就会有公钥),生成公私钥的时候公钥写入次文件中(authorized_keys)
- 服务器接收到客户端的连接请求后,在自己authorized_keys文件中匹配,是否存在该客户端的公钥信息,如果存在就生成一个随机数R,再用客户端的公钥,针对随机数R进行加密,得到了一个加密后的随机数公钥(R),pubkey(R)
- 客户端通过自己的私钥,对pubkey(R)进行解密,得到了随机数R,再针对这个随机数R和当前连接会话sessionkey采用MD5加密方式,生成摘要Digest1,再次发送服务器进行验证; Digest1 是 随机数R 对数据 sessionkey采用MD5 对称加密后的数据
- 服务器针对这个随机数R和sessionkey也采用同样的摘要算法(MD5 )计算得出Digest2
- 服务器比对Digest1、Digest2是否一致,一致则验证通过,客户端登录服务器
3.服务器设置
编辑ssh 远程连接配置 /etc/ssh/sshd_config
## 开启 公私钥登录认证
PubkeyAuthentication yes
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
## 添加 公钥的保存文件 看做注释是有默认的配置文件 .ssh/authorized_keys and .ssh/authorized_keys2 这里我们是显示指定
AuthorizedKeysFile .ssh/authorized_keys
4.生成公钥私钥对
私钥不加密
执行命令后一路enter
[root@localhost ~]# ssh-keygen -b 2048 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:TQ5Xk7Ipq63Hf9P2NpF8ljsDguIvAX3d+kjk+OKVAsk root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| o. |
| .... |
| . . ++. |
| ...oBoo . |
| .ESoB . . o|
| ooo =.. =o|
| .+o.oo+...+|
| .o+.ooo.o=.|
| .o++o. o o=|
+----[SHA256]-----+
私钥加密
执行命令后需要在提示输入命令的时候输出密码 其他的enter 即可
[fffs@localhost ~]$ ssh-keygen -b 2048 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fffs/.ssh/id_rsa):
Created directory '/home/fffs/.ssh'.
Enter passphrase (empty for no passphrase): #### 要设置密码的话 就在这里输入
Enter same passphrase again:
Your identification has been saved in /home/fffs/.ssh/id_rsa.
Your public key has been saved in /home/fffs/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Zgzlob+e1c6y1adA+o3MHGWlauJIpqJyPzUuzlFC2lc fffs@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| o |
| + . |
| . o E .|
| + = o |
| . o o S . + |
| +oo . + = |
| .o .+ + B . .|
|. ..+..= =.@ = o |
| o.+++. + ooO o |
+----[SHA256]-----+
秘钥对
两种方式都会生成一个公钥和一个私钥
[fffs@localhost .ssh]$ ll
-rw-------. 1 fffs ffsgroup 1766 8月 28 21:43 id_rsa ###私钥
-rw-r--r--. 1 fffs ffsgroup 408 8月 28 21:43 id_rsa.pub ### 公钥
公钥添加到authorized_keys
[fffs@localhost .ssh]$ touch authorized_keys
[fffs@localhost .ssh]$ cat id_rsa.pub >> authorized_keys
私钥不加密Xshell 配置
设置好用户名和 方法使用public Key 点击设置 添加 秘钥
导入我们服务上生成的这个配置
这样就创建好了一个连接 直接使用就好了
私钥加密Xshell 配置
和上面的 私钥加密Xshell 配置
配置差不多
不同的是这里在导入秘钥文件的时候是需要填写之前生成秘钥的那个密码的
然后选中我们这个添加的这个加密的私钥
然后连接就创建成功 ,只是每次在连接的时候需要输入一次秘钥的解密密码