一、免密登录需求
平时在工作中,可能需要从一台服务器上将文件分发到其他多台服务器,如果每次都需要输入密码就
显得太麻烦了,这种情况就可以通过免密登录来实现。如ansible,kubernetes等服务在部署时都有
这样的需求。
二、配置SSH免密登录概述
1、ssh免密登录原理
SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络上安全地进行远程登录和其他
安全网络服务。免密认证的核心思想是利用公钥和私钥进行认证,而不是每次都输入密码。只要在
客户端和服务器之间正确配置了公钥和私钥,用户可以直接登录而无需输入密码。
2、相关的文件
在每台服务的~/.ssh目录下会有以下四个文件: authorized_keys: 存放远程免密登录的公钥,主要
通过这个文件记录多台机器的公钥。 id_rsa: 私钥文件 id_rsa.pub: 公钥文件 known_hosts: 已知
的主机公钥清单
如果将我们生成的公钥放到相应主机的对应用户的authorized_keys文件下,就可以实现免密登录。
在生成密钥时,默认会在~/.ssh目录下生成密钥(id_rsa和id_rsa.pub),如果.ssh目录不存在
,则会自动创建。
三、实现免密操作
1、生成密钥
ssh-keygen -t rsa (三次回车,不输入其他信息)
-t 选项指定要使用的加密算法,“rsa”表示使用RSA算法
默认会在~/.ssh目录下生成密钥(id_rsa和id_rsa.pub),如果.ssh目录不存在,则会自动创建。
[root@linux ~]# 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:A/kj+6dddddoKheAo6Kx932341VYLN2J/wmBHn0XFw root@linux The key's randomart image is: +---[RSA 2048]----+ | .o*+E| | . ..=.=o| | o. . o.* =| |. . oo . . o +.| |oo o..S . o| |= o . o+ o o | |oo.o.oo | |= =o. . | |o++...... | +----[SHA256]-----+
2、复制本机公钥到其它机器(可以使用命令方式传输也可以复制拷贝密钥内容到另外一台机器)
#如下是命令方式拷贝公钥id_rsa.pub到172.168.22.35 [root@linux ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.168.22.35 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '172.168.22.35 (172.168.22.35)' can't be established. ECDSA key fingerprint is SHA256:BpTKrxztroqHQiyBmInb7Y9R/rKyNgtyqvBp3TZiToU. ECDSA key fingerprint is MD5:08:6c:1d:18:4c:a7:6f:7c:09:86:47:ea:07:a2:55:e0. 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@172.168.22.35's password: # 输入服务器密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@172.168.22.35'" and check to make sure that only the key(s) you wanted were added. #另外一种方式就是使用命令cat ~/.ssh/id_rsa.pub本机密钥内容,然后复制内容行(注意这个文件只有一行内容,且内容较长复制后要检查是否只有一行) #拷贝后粘贴到172.168.22.35的机器~/.ssh/authorized_keys 文件末尾行(没有文件就新增这个文件,但权限需要chmod 600 authorized_keys)
注意:比如上边的操作是将本机root用户下的公钥id_rsa.pub放置到机器172.168.22.35的root用户下,
那么则表示172.168.22.35机器的root用户可以使用root直接访问本机,如不希望对方免密使用root用户
访问本机,则本机生成密钥请使用其它用户例如user,则设置后在172.168.22.35的机器免密访问就需要
使用ssh带user用户访问才能成功。
如果以上设置后还不正常,需要检查 SSH 服务配置:
• 确保 PubkeyAuthentication 选项被设置为 yes 。
• 确保 AuthorizedKeysFile 选项被设置为 .ssh/authorized_keys 。
• 修改配置后,重启 SSH 服务:sudo systemctl restart sshd
•确保 /etc/ssh/sshd_config 文件中的 PasswordAuthentication 选项被设置为 no 。
•确保确保.ssh文件夹权限为700,AuthorizedKeysFile权限为600
免责声明:本文为原创文章,版权归 zhaoshuman 所有,欢迎分享本文,转载请保留出处!
发表评论