将 ssh 公钥复制到多个 Linux 主机

将 ssh 公钥复制到多个 Linux 主机

我正在尝试将 .ssh/id_rsa.pub 从我们的中央服务器复制到多个服务器。我有以下脚本,通常用于将更改推送到不同的服务器。

#!/bin/bash


for ip in $(<IPs); do
    # Tell the remote server to start bash, but since its
    # standard input is not a TTY it will start bash in
    # noninteractive mode.
    ssh -q "$ip" bash <<-'EOF'



EOF

done

但在这种情况下,我需要在本地服务器上获取公钥,然后将其添加到多个服务器。有没有办法使用上面的此处文档脚本来执行以下操作。

cat .ssh/id_rsa.pub |ssh [email protected] 'cat > .ssh/authorized_keys'

答案1

通过这个简单的循环,您可以将其自动化并传播到所有远程服务器。

#!/bin/bash
for ip in `cat /home/list_of_servers`; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub $ip
done

答案2

这是我的简单脚本,用于将 ssh-keygen 复制到多个服务器,而无需每次都询问密码。

for server in `cat server.txt`;  
do  
    sshpass -p "password" ssh-copy-id -i ~/.ssh/id_rsa.pub user@$server  
done

这需要sshpass,可能需要通过包或从源代码单独安装。

答案3

如果需要将其他人的公钥复制到多台机器,则接受的答案将不起作用。所以,我想出了以下解决方案:

cat add-vassal-tc-agents.sh

#!/bin/bash
set -x # enable bash debug mode
if [ -s vassal-public-key.pub ]; then # if file exists and not empty
    for ip in `cat tc-agents-list.txt`; do # for each line from the file
        # add EOL to the end of the file (i.e., after the last line)
        # and echo it into ssh, where it is added to the authorized_keys
        sed -e '$s/$/\n/' -s vassal-public-key.pub | ssh "$ip" 'cat >> ~/.ssh/authorized_keys'
    done
else
    echo "Put new vassal public key into ./vassal-public-key.pub to add it to tc-agents-list.txt hosts"
fi

此脚本将新密钥添加到计算机列表上的用户,前提是它运行的环境具有访问权限。

示例tc-agents-list.txt

[email protected]
[email protected]
[email protected]
[email protected]

注意:这需要使用 GNU sed。由于问题说“Linux”,因此可能存在 GNU sed。

答案4

您可以使用简单的 while 循环和嵌入式服务器列表来完成此操作,如下所示:

while read SERVER
do
    ssh-copy-id user@"${SERVER}"
done <<\EOF
server1
server2
server3
EOF

将列表放在脚本中可以消除可能会丢失的单独数据文件。

相关内容