网站搜索

使用脚本为多个远程服务器设置无密码 SSH 登录


基于 SSH 密钥的身份验证(也称为公钥身份验证)允许无密码身份验证,它是比密码身份验证更安全、更好的解决方案。 SSH 无密码登录的一大优势(更不用说安全性了)是它允许各种跨服务器进程的自动化。

在本文中,我们将演示如何使用 shell 脚本创建 SSH 密钥对并将公钥一次性复制到多个远程 Linux 主机。

在 Linux 中创建新的 SSH 密钥

首先,使用 生成 SSH 密钥对(SSH 客户端在登录远程 SSH 服务器时用于验证自身身份的私钥/身份密钥,以及作为授权密钥存储在运行 SSH 服务器的远程系统上的公钥)。 >ssh-keygen命令如下:

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 [email 

这就是我们为您准备的一切!如果您有任何贡献,特别是在改进 shell 脚本方面,请通过下面的反馈表告诉我们。