using使用脚本为多个远程服务器配置不带密码的SSH登录

基于SSH密钥的身份验证(也称为公共密钥身份验证)允许进行无密码身份验证,这比密码身份验证更安全且更好。 如何确定用户使用的是基于密码还是基于密钥的SSH身份验证通过SSH进行无密码登录的主要优点之一(更​​不用说安全性)是它可以自动执行各种跨服务器进程。在Linux服务器之间进行无密码验证的方法在本文中,我们将演示如何创建一个SSH密钥对,以及如何使用Shell脚本同时将公钥复制到多个远程Linux主机。

在Linux上创建新的SSH密钥

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

# ssh-keygen

using使用脚本为多个远程服务器配置不带密码的SSH登录

为多个远程登录创建bash脚本

接下来,创建一个脚本以帮助将公钥复制到多个远程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' не найден!"
        exit 1
fi

if [ ! -f $HOST_FILE ]; then
        echo "File '$HOST_FILE' не найден!"
        exit 2
fi

for IP in `cat $HOST_FILE`; do
        ssh-copy-id -i $PUBLIC_KEY_FILE [email protected]$IP 2>$ERROR_FILE
        RESULT=$?
        if [ $RESULT -eq 0 ]; then
                echo ""
                echo "Открытый ключ успешно скопирован на $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 protected]

如果您有任何特殊的机会来改进脚本,请通过下面的反馈表告诉我们。

Sidebar