如何在CentOS 7上设置SSH密钥以进行无密码登录?
概述:
Public Key认证的主要魅力在于认证时承诺不必提供密码就能够同远程系统建立连接。
Public Key认证的基础在于一对密钥,public key和private key,public key对数据进行加密而且只能用于加密,private key 只能对所匹配的public key加密过的数据进行解密。
我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。
此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。
最后,远程系统的sshd会得出结论我们拥有匹配的private key允许我们登录。
一、serverA 免密登录 serverB 原理
1.首先在 serverA 上生成一对秘钥(ssh-keygen)
2.将公钥拷贝到 serverB,重命名 authorized_keys
3.serverA 向 serverB 发送一个连接请求,信息包括用户名、ip
4.serverB 接到请求,会从 authorized_keys 中查找,是否有相同的用户名、ip,如果有 serverB 会随机生成一个字符串
5.然后使用使用公钥进行加密,再发送个 serverA
6.serverA 接到 serverB 发来的信息后,会使用私钥进行解密,然后将解密后的字符串发送给 serverB
7.serverB 接到 serverA 发来的信息后,会给先前生成的字符串进行比对,如果一直,则允许免密登录
二、Centos7 默认安装了 ssh服务
三、启动 ssh 服务
# 查看 ssh 状态
systemctl status sshd
# 启动 ssh
systemctl start sshd
# 停止 ssh
systemctl stop sshd
四、serverA 生成秘钥,遇到提示直接敲回车即可
CentOS7 默认使用RSA加密算法生成密钥对,保存在~/.ssh目录下的id_rsa(私钥)和id_rsa.pub(公钥)。也可以使用“-t DSA”参数指定为DSA算法,对应文件为id_dsa和id_dsa.pub,密钥对生成过程会提示输入私钥加密密码,可以直接回车不使用密码保护。
[root@centos7 ~]# cd ~/.ssh/
[root@centos7 .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:oRDpMNnAxtcmSMZKwDu1mFQ5XeONGbgHsie31r+OI84 root@centos7
The key's randomart image is:
+---[RSA 2048]----+
|+==*+oo+ |
| =X===+ * |
|oo==*oo+.. |
|.= +.= o . |
| . + = S |
| o . |
| . . |
| .. ... |
| .E..oo. |
+----[SHA256]-----+
[root@centos7 .ssh]# ls
id_rsa id_rsa.pub known_hosts
[root@centos7 .ssh]#
五、解决找不到 .ssh 目录
如果在上面生成秘钥后,执行 cd ~/.ssh 找不到 .ssh 目录,是因为没有使用 ssh 登录过,使用 ssh 登录一下即可生成 .ssh 目录,之后再重新执行 ssh-keygen 生成秘钥即可
[root@centos7 ~]# ls ~/.ssh/
known_hosts
六、移动 id_rsa.pub 公钥文件
# 将 serverA ~/.ssh目录中的 id_rsa.pub 这个文件拷贝到你要登录的 serverB 的~/.ssh目录中
scp ~/.ssh/id_rsa.pub 192.168.0.101:~/.ssh/
# 然后在 serverB 运行以下命令来将公钥导入到~/.ssh/authorized_keys这个文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 另外要注意请务必要将服务器上
~/.ssh权限设置为700
~/.ssh/authorized_keys的权限设置为600
# 这是linux的安全要求,如果权限不对,自动登录将不会生效
七、设置ssh,打开秘钥登录功能
[root@centos7 .ssh] vim /etc/ssh/sshd_config
去掉注释#
RSAAuthentication yes
PubkeyAuthentication yes
重启ssh服务
ystemctl restart sshd
八、验证免密登录
ssh 192.168.101
使用软件登录linux
一、用软件生成公钥拷贝到服务器
[root@centos7 ~]# ls ~/.ssh/
authorized_keys id_rsa id_rsa_2048 (2) id_rsa.pub known_hosts
root@centos7 ~]# cat ~/.ssh/id_rsa_2048\ \(2\) >> ~/.ssh/authorized_keys
# 另外要注意请务必要将服务器上
~/.ssh权限设置为700
~/.ssh/authorized_keys的权限设置为600
# 这是linux的安全要求,如果权限不对,自动登录将不会生效
二、使用软件登录Linux