使用脚本为多个远程服务器设置无密码 SSH 登录
基于 SSH 密钥的身份验证(也称为公钥身份验证)允许无密码身份验证,它是一种比密码身份验证更安全、更好的解决方案。SSH无密码登录的一个主要优点(更不用说安全性)是它允许自动化各种跨服务器进程。
相关阅读:如何保护和强化 OpenSSH 服务器
在本文中,我们将演示如何使用 shell 脚本创建 SSH 密钥对并一次将公钥复制到多个远程 Linux 主机。
在 Linux 中创建新的 SSH 密钥
首先,使用ssh- keygen 命令生成 SSH 密钥对(SSH 客户端登录远程 SSH 服务器时用于验证自身身份的私钥/身份密钥以及作为授权密钥存储在运行 SSH 服务器的远程系统上的公钥),如下所示:
# ssh-keygen
为多个远程登录创建 Shell 脚本
接下来,创建一个 shell 脚本,帮助将公钥复制到多个远程 Linux 主机。
# vim ~/.bin/ssh-copy.sh
在文件中复制并粘贴以下代码(相应地替换以下变量USER_NAME
- 要连接的用户名,HOST_FILE
- 包含主机名或 IP 地址列表的文件,以及ERROR_FILE
- 用于存储任何 ssh 命令错误的文件)。
#!/bin/bash USER_NAME="root" HOST_FILE="/root/hosts" ERROR_FILE="/tmp/ssh-copy_error.txt" PUBLIC_KEY_FILE="$1" if [ ! -f $PUBLIC_KEY_FILE ]; then echo "File '$PUBLIC_KEY_FILE' not found!" exit 1 fi if [ ! -f $HOST_FILE ]; then echo "File '$HOST_FILE' not found!" exit 2 fi for IP in `cat $HOST_FILE`; do ssh-copy-id -i $PUBLIC_KEY_FILE $USER_NAME@$IP 2>$ERROR_FILE RESULT=$? if [ $RESULT -eq 0 ]; then echo "" echo "Public key successfully copied to $IP" echo "" else echo "$(cat $ERROR_FILE)" echo exit 3 fi echo "" done
保存文件并关闭。
然后使用chmod命令使脚本可执行,如下所示。
# chmod +x ssh-copy.sh
现在运行ssh-copy.sh
脚本并将您的公钥文件指定为第一个参数,如屏幕截图所示:
# ./ssh-copy.sh /root/.ssh/prod-rsa.pub
接下来,使用ssh-agent
来管理您的密钥,它将您的解密私钥保存在内存中并使用它来验证登录。启动 后ssh-agent
,按如下方式将您的私钥添加到其中:
# eval "$(ssh-agent -s)" # ssh-add ~/.ssh/prod_rsa
无需密码即可登录远程 Linux 服务器
现在,您可以登录任何远程主机,而无需提供 SSH 用户身份验证密码。这样,您就可以自动化跨服务器流程。
# ssh root@10.24.20.34
这就是我们为您准备的全部内容!如果您有任何贡献,特别是对改进 shell 脚本,请通过下面的反馈表告诉我们。