我知道我可以执行以下操作来复制 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”