【无标题】企业级ssh免密登录

1 篇文章 0 订阅

SSH 密钥登录


SSH 默认采用密码登录,这种方法有很多缺点,简单的密码不安全,复杂的密码不容易记忆,每次手动输入也很麻烦。密钥登录是更好的解决方案。

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

公钥----添加到服务器的某个账户上,~/.ssh目录下(如该目录不存在,则新建一个),并命名为authorized_keys(如该文件已经存在,则把公钥的内容放在原authorized_keys内容的末尾,如果authorized_keys文件的末尾不是一个换行符,会导致新的公钥添加到前一个公钥的末尾,两个公钥连在一起,使得它们都无法生效。所以,如果authorized_keys文件已经存在,使用ssh-copy-id命令之前,务必保证authorized_keys文件的末尾是换行符(假设该文件已经存在)。

私钥----必须私密保存,不能泄漏。

SSH 密钥登录采用的是非对称加密,每个用户通过自己的密钥登录。其中,私钥必须私密保存,不能泄漏;公钥则是公开的,可以对外发送。它们的关系是,公钥和私钥是一一对应的,每一个私钥都有且仅有一个对应的公钥,反之亦然。
如果数据使用公钥加密,那么只有使用对应的私钥才能解密,其他密钥都不行;反过来,如果使用私钥加密(这个过程一般称为“签名”),也只有使用对应的公钥解密。

密钥登录的过程
SSH 密钥登录分为以下的步骤。
预备步骤,客户端通过ssh-keygen生成自己的公钥和私钥。

第一步,手动将客户端的公钥放入远程服务器的指定位置。
第二步,客户端向服务器发起 SSH 登录的请求。
第三步,服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。
第四步,客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。
第五步,服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。
 

首先我们先生成密钥

[root@test01 .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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:0kyKd1F+BfkZW7DMGg2M/POsbfbjZx1Vq5aCDajxu9o root@test01
The key's randomart image is:
+---[RSA 2048]----+
|         ..oooo. |
|         oo o*..o|
|        + ..o.==o|
|     o * o .oo+..|
|    . B S + .+o .|
|     o + . o +o. |
|        .   oo  o|
|      ..    . +.+|
|     ..E.    o.++|
+----[SHA256]-----+

查看公钥

[root@test01 ~]# cd ~/.ssh/
[root@test01 .ssh]# ls
id_rsa  id_rsa.pub
[root@test01 .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1Xkw8d59BnOaTriffWqNtN+ZdcjUxIPmSNFGIWTvZBE7ciO/VnT5/z/6nwLjOM97EGAkJwmaDKq1xdvHOFHmFzasc7z9TiXwyNI5JPvRN2vYyc5jtLhM+TkDcJjaUzO1lb0pcJsK9WyURNanz3oTCsdwGWLERMcO/c8nMmH/wygMC2cfkvzMo+oioC8YnRoWM6EycmAs4g1EQAjiOaxIqM8NQaJalJLAi1wcikwPmpgm0NJ50LQhIkpcZZNQ+NTIezRq2v3fAWqZ2jn/iZQINcx0lUy49ukr41b/E5IW9BqmY+TqvVlMqWtSGQnD1Q1wm+A96qZPxOxVpSEBgnpwd root@test01

将公钥推送到需要登录的用户家目录下

[root@test01 .ssh]# ssh-copy-id -i  ~/.ssh/id_rsa.pub root@192.168.81.6
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.81.6 (192.168.81.6)' can't be established.
ECDSA key fingerprint is SHA256:lf5EFGSDQmkepHluFiKrW0tfUVC7KE6rb09gbvzknEE.
ECDSA key fingerprint is MD5:19:6a:e0:b6:d7:85:b8:14:4f:d5:0f:9c:dc:7c:46:5e.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.81.6's password: 
Permission denied, please try again.
root@192.168.81.6's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.81.6'"
and check to make sure that only the key(s) you wanted were added.

到远程服务器查看推送过来的密钥

[root@test02 ~]# cd .ssh/
[root@test02 .ssh]# ls
authorized_keys
[root@test02 .ssh]# cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1Xkw8d59BnOaTriffWqNtN+ZdcjUxIPmSNFGIWTvZBE7ciO/VnT5/z/6nwLjOM97EGAkJwmaDKq1xdvHOFHmFzasc7z9TiXwyNI5JPvRN2vYyc5jtLhM+TkDcJjaUzO1lb0pcJsK9WyURNanz3oTCsdwGWLERMcO/c8nMmH/wygMC2cfkvzMo+oioC8YnRoWM6EycmAs4g1EQAjiOaxIqM8NQaJalJLAi1wcikwPmpgm0NJ50LQhIkpcZZNQ+NTIezRq2v3fAWqZ2jn/iZQINcx0lUy49ukr41b/E5IW9BqmY+TqvVlMqWtSGQnD1Q1wm+A96qZPxOxVpSEBgnpwd root@test01

登录成功

[root@test01 .ssh]# ssh root@192.168.81.6
Last failed login: Fri Jan 14 00:10:25 CST 2022 from 192.168.81.5 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Thu Jan 13 22:31:03 2022 from 192.168.81.1
[root@test02 ~]#

如果需要登录其他用户则需要将密钥推送到其他用户的家目录下的.ssh目录下,可以采用上面的方式也可以采用第二种方式

复制密钥

[root@test01 ~]# cd ~/.ssh/
[root@test01 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@test01 .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1Xkw8d59BnOaTriffWqNtN+ZdcjUxIPmSNFGIWTvZBE7ciO/VnT5/z/6nwLjOM97EGAkJwmaDKq1xdvHOFHmFzasc7z9TiXwyNI5JPvRN2vYyc5jtLhM+TkDcJjaUzO1lb0pcJsK9WyURNanz3oTCsdwGWLERMcO/c8nMmH/wygMC2cfkvzMo+oioC8YnRoWM6EycmAs4g1EQAjiOaxIqM8NQaJalJLAi1wcikwPmpgm0NJ50LQhIkpcZZNQ+NTIezRq2v3fAWqZ2jn/iZQINcx0lUy49ukr41b/E5IW9BqmY+TqvVlMqWtSGQnD1Q1wm+A96qZPxOxVpSEBgnpwd root@test01

将公钥复制到对方用户家目录下并授权

[root@test02 ~]# useradd test02
[root@test02 ~]# su test02
[test02@test02 root]$ cd /home/test02/
[test02@test02 ~]$ ls -a
.  ..  .bash_logout  .bash_profile  .bashrc
[test02@test02 ~]$ mkdir .ssh
[test02@test02 ~]$ cd .ssh/
[test02@test02 .ssh]$ vim authorized_keys
[test02@test02 .ssh]$ cat !$
cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1Xkw8d59BnOaTriffWqNtN+ZdcjUxIPmSNFGIWTvZBE7ciO/VnT5/z/6nwLjOM97EGAkJwmaDKq1xdvHOFHmFzasc7z9TiXwyNI5JPvRN2vYyc5jtLhM+TkDcJjaUzO1lb0pcJsK9WyURNanz3oTCsdwGWLERMcO/c8nMmH/wygMC2cfkvzMo+oioC8YnRoWM6EycmAs4g1EQAjiOaxIqM8NQaJalJLAi1wcikwPmpgm0NJ50LQhIkpcZZNQ+NTIezRq2v3fAWqZ2jn/iZQINcx0lUy49ukr41b/E5IW9BqmY+TqvVlMqWtSGQnD1Q1wm+A96qZPxOxVpSEBgnpwd root@test01
[test02@test02 .ssh]$ cd /home/test02
[test02@test02 ~]$ chmod 700 .ssh/
[test02@test02 ~]$ chmod 600 .ssh/authorized_keys 

测试登录

[root@test01 ~]# ssh test02@192.168.81.6
Last login: Fri Jan 14 00:25:18 2022
[test02@test02 ~]$ 

如果不想让别人登录某个账号则可以修改/etc/ssh/sshd_config文件在里面添加

AllowUsers  root   # 只允许root用户登录
DenyUsers   root   # 只禁止root用户登录
DenyGroups  root   # 只允许root用户组登录
AllowGroups root   # 只禁止root用户组登录

第一次登录及后续登录免输入yes

全局配置

[root@test01 ~]# sed -i 's/#   StrictHostKeyChecking ask/StrictHostKeyChecking no/' /etc/ssh/ssh_config
[root@test01 ~]# systemctl restart sshd

当前用户生效

[root@test01 ~]# echo 'StrictHostKeyChecking no' > ~/.ssh/config
[root@test01 ~]# chmod 600 ~/.ssh/config

禁止使用密码登录

[root@QASHV144212 ~]# vim /etc/ssh/sshd_config
PasswordAuthentication no
[root@QASHV144212 ~]# systemctl restart sshd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值