使用shell脚本将ssh-key复制到多个服务器/登录

时间:2015-05-18 15:50:34

标签: bash shell ssh

我正在我的服务器上设置SSH密钥,我正在尝试编写一个脚本来将它们全部复制出来。基本上我想要做的是将ssh id从服务器1复制到服务器1-10,然后登录到服务器2并将ssh id从服务器2复制到服务器1-10。

我有一个数组设置和2个for循环使用ssh-copy-id命令,但我错过了登录每个服务器的步骤,因为它出现在列表中。我意识到此时我将输入密码,但这比单独登录每个密码要容易得多。有人可以帮我吗?

另外,我的作品阻止了GitHub,所以请不要链接到那里。我无法看到它:(

2 个答案:

答案 0 :(得分:0)

以下(完全未经测试的)代码应该做你想要的事情。

您运行此主机的主机以外的主机将在authorized_keys文件中拥有自己的条目(如果这很重要(可以避免,但需要更多工作,并且可能很容易在需要时手动修复)。

hosts=(hostA hostB hostC hostD ...)

for host in "${hosts[@]}"; do
    # Skip the current host.
    if [ "$HOSTNAME" = "$host" ]; then
        continue
    fi

    # Copy the current host's id to each other host.
    # Asks for password.
    ssh-copy-id "$host"
done

# Get the id's from each host.
for host in "${hosts[@]}"; do
    # Skip the current host.
    if [ "$HOSTNAME" = "$host" ]; then
        continue
    fi

    ssh "$host" 'cat .ssh/id_rsa.pub' >> host-ids
done

for host in "${hosts[@]}"; do
    # Skip the current host.
    if [ "$HOSTNAME" = "$host" ]; then
        continue
    fi

    # This might work but I'm not sure.
    ssh-copy-id -i host-ids "$host"
    # If that didn't work then this should.
    #ssh "$host" 'cat >> .ssh/authorized_keys' <host-ids
done

答案 1 :(得分:0)

感谢您提出的所有建议,但我刚刚登录每个服务器并运行了该脚本。我没有时间玩脚本了:/ SSH密钥似乎仍然没有用,但那是另一个时间/线程。