using使用脚本为多个远程服务器配置不带密码的SSH登录
基于SSH密钥的身份验证(也称为公共密钥身份验证)允许进行无密码身份验证,这比密码身份验证更安全且更好。 如何确定用户使用的是基于密码还是基于密钥的SSH身份验证通过SSH进行无密码登录的主要优点之一(更不用说安全性)是它可以自动执行各种跨服务器进程。在Linux服务器之间进行无密码验证的方法在本文中,我们将演示如何创建一个SSH密钥对,以及如何使用Shell脚本同时将公钥复制到多个远程Linux主机。
在Linux上创建新的SSH密钥
首先,使用ssh生成SSH密钥对(SSH客户端登录到远程SSH服务器时用于认证的私有/身份密钥,以及作为授权密钥存储在运行SSH服务器的远程系统上的公共密钥) -keygen如下:
# ssh-keygen
为多个远程登录创建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]
如果您有任何特殊的机会来改进脚本,请通过下面的反馈表告诉我们。