将多个 SSH 密钥添加到新服务器

将多个 SSH 密钥添加到新服务器

我知道我可以执行以下操作来复制 SSH 密钥

ssh-copy-id [email protected]

但是当我部署新服务器时,我需要为其授权多个 SSH 密钥。有没有什么方法可以让授权多个 SSH 密钥变得更容易?

答案1

阅读 的手册页ssh-copy-id,似乎它应该从 ssh-agent 复制所有不接受登录的密钥。因此,使用 将所有密钥对加载到 ssh-agent 中,然后ssh-add使用。ssh-copy-id

如果这不起作用,您可以尝试指定键ssh-copy-id

for i in ~/.ssh/*.pub; do
  ssh-copy-id -i $i user@host
done

如果这对你来说仍然不起作用,也许可以看看类似 ansible 的东西:

# sshkeys.yml
---
- hosts: all
  remote_user: foo
  tasks:
  - authorized_key:
      user: foo
      key: '{{lookup("file", item)}}'
    with_items:
    - id_rsa.pub
    - id_rsa_alternate.pub

使用方式如下:

ansible-playbook -i remote.host.com, -k sshkeys.yml

如果您选择这条路线,请务必阅读有关 ansible 的更多信息。

答案2

介绍

这种方式比 ssh copy id 好很多,因为您可以将密钥复制到任何用户,适用于任何端口的 ssh 服务器,而不仅仅是 22。哦,您可以在 authorized_keys.org 中拥有多个密钥,这些密钥将附加到服务器上的 authorized_keys 文件中。确保 authorized_keys.org 每行都有一个 ssh 公钥。

有很多方法可以根据自己的喜好构造这些行。我建议永远不要忘记这种cat | ssh cat方法或类似的echo | ssh ssh cat方法,因为它们非常适合在远程服务器上写入。cat SOMETHING | ssh SERVER "cat - > REMOTEFILE"或者您可以使用 echo like,echo "SOMETHING" | ssh SERVER "cat - > REMOTEFILE" 这些是完美的方法来在本地读取某些内容,然后将其写入或附加到另一台服务器上。像这样写入cat - > REMOTEFILE或像这样附加cat - >> REMOTEFILE

答案

cat authorized_keys.org | ssh -p 22 [email protected] "cat - >> /root/.ssh/authorized_keys"

或者

cat authorized_keys.org | ssh -p 22 [email protected] "cat - >> ~/.ssh/authorized_keys"

此外,如果您有 ssh 密钥(一个 ssh 密钥):

cat id_rsa.pub | ssh -p 22 [email protected] "cat - >> /root/.ssh/authorized_keys"

或者

cat id_rsa.pub | ssh -p 22 [email protected] "cat - >> ~/.ssh/authorized_keys"

这应该足以让我们理解这一切了。

更多信息

注意:请阅读我下面的评论,了解您不限于使用“root”。在这里您可以看到它的所有部分都是可修改的:

[input of ssh keys or keys (as long as new line sepearted)] | ssh -p PORT USER@SERVER "cat - >> AUTHORIZEDKEY"

奖金:假设 ssh 服务器不允许密码登录而只允许 SSH 密钥,但您想让它了解更多密钥。

  • [input of ssh keys or keys (as long as new line sepearted)] | ssh -i PRIVATE -p PORT USER@SERVER "cat - >> AUTHORIZEDKEY"
  • [输入 ssh 密钥或密钥(只要用新行分隔)]:这可以是具有一个或多个公钥的文件的 cat,只要它们是用新行分隔的,或者是完整公钥的 echo(或多个公钥,同样,只要它们是用新行分隔的 - 您可以使用“echo -e 'line1\nline2'”来用 echo 分隔新行。)
  • PRIVATE:如果你的 ssh 服务器只允许某个密钥进入,因为它只配置了 ssh key auth,并且有你的公钥。然后指定该公钥的私钥
  • USER:您要连接并编辑其密钥的用户。如果您以 root 身份连接(例如:[电子邮件保护]),您可以向任何人的密钥添加“cat - >> /home/anyuser/.ssh/authorized_keys”,也可以向 root 密钥添加“cat - >> /root/.ssh/autorized_keys”。但是,如果您以 user1 身份连接,则只能更改 user1 的密钥“cat - >> /home/user1/.ssh/authorized_keys”或更简单的“cat - >> ~/.ssh/authorized_keys”(最后一个适用于任何用户)。
  • 服务器:您要连接的服务器。在本例中为 server.com
  • PORT:服务器上接受的 SSH 服务器端口。通常为端口 22。请注意,如果端口为 22,则可以省略“-p 22”,因为这是默认值。
  • AUTHORIZEDKEY:这是 authorized_keys 的位置。我在 USER 点中介绍了这一点。它将是“/root/.ssh/authorized_keys”或“/home/user1/.ssh/authorized_keys”或“~/.ssh/authorized_keys”

相关内容