欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何在Linux中设置服务器间无密码登录?

最编程 2024-08-03 14:15:45
...

前言

我们在linux服务器上操作时,难免会遇到ssh跳转到其他服务器去操作命令的场景,每次访问时都需要我们手动输入一遍密码,这样虽然更为安全,但是在执行服务器数量较多的批量操作时,这种安全认证会十分繁琐。实际上,Linux中提供了对应的命令来帮助我们开通服务器间的免密登录,本篇文章将对具体的步骤进行讲解,希望对各位读者有所帮助。

步骤一:使用ssh-keygen命令生成本地的公钥和私钥

ssh-keygen命令 用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。SSH 密钥默认保留在 ~/.ssh 目录中。如果没有 ~/.ssh 目录,ssh-keygen命令会使用正确的权限创建一个。

ssh-keygen -t rsa
ssh-keygen的命令可选项
-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型。

执行完命令后,会有几个选项给你选择,一般来说直接回车,使用默认配置即可。需要注意的是,如果本身服务器已经生成过ssh秘钥了,这一步可以省略
想知道秘钥曾经生成过,可以看步骤二。

步骤二:查看秘钥是否生成成功

ll ~/.ssh/

正常来说,如果ssh-keygen命令执行成功,我们可以在目录中看到有id_rsa(存放私钥)和id_rsa.pub(存放公钥)两个文件

1656486697743.png

步骤三:使用ssh-copy-id命令将公钥复制到其他服务器中

先简单介绍一下ssh-copy-id命令

ssh-copy-id 命令可以把本地主机的公钥复制到远程主机的 authorized_keys 文件上。authorized_keys 文件用来验证 client 。使用 ssh-copy-id 命令将本地公钥复制到远程主机之后可以实现免密登录远程主机。如果不传入 -i 参数,ssh-copy-id 使用默认 ~/.ssh/identity.pub 作为默认公钥。如果多次运行 ssh-copy-id ,该命令不会检查重复,会在远程主机中多次写入 authorized_keys 。

注意,本地 ~/.ssh/id_rsa 的权限,chmod 400 ~/.ssh/id_rsa ,该文件包含用于授权的私钥,如果该文件可以被其他用户访问,ssh 会忽略该私钥。

ssh-copy-id [ -i [identity_file] ]  [user@]machine
  • -i 指定公钥文件
ssh-copy-id -i ~/.ssh/id_rsa.pub 想要免密登录的IP地址

执行完上述命令后,我们后续就可以免密登录其他服务器了。

可参考的批量赋权脚本

如果需要配置免密登录的服务器比较多,我们可以通过脚本来解决这些重复性的动作。

#!/bin/bash
# host填写实际想要免密登录的ip
 host=(1.1.1.1 1.1.1.2)

ssh-keygen -t rsa
#迭代操作
for i in ${!host[@]}
do
   ssh-copy-id -i ~/.ssh/id_rsa.pub ${host[$i]}
done