如何将公钥复制到 ssh 服务器?

Tim*_*Tim 45 ssh

这是我尝试过的,但出现错误:

$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password: 
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Run Code Online (Sandbox Code Playgroud)

Mic*_*zek 84

OpenSSH 附带了一个命令来执行此操作,ssh-copy-id. 您只需给它远程地址,然后它将您的公钥添加到authorized_keys远程机器上的文件中:

$ ssh-copy-id tim@just.some.other.server
Run Code Online (Sandbox Code Playgroud)

您可能需要使用该-i标志在本地机器上定位您的公钥:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
Run Code Online (Sandbox Code Playgroud)


Mr.*_*key 38

你总是可以做这样的事情:

scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com 
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

我不确定您是否可以cat从本地机器进入 ssh 会话。只需按照建议将其移动到 /tmp 即可。

编辑:这正是ssh-copy-id它的作用。就像迈克尔说的那样。


pab*_*ouk 10

此答案描述了如何使问题中显示的预期方式起作用。

您可以在远程计算机上执行一个 shell 来解释>>重定向运算符的特殊含义:

ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

重定向操作符>>通常由 shell 解释。

当您执行时ssh host 'command >> file',不保证command >> file会被 shell 解释。在您的情况下,在没有特殊解释的情况下command >> file执行而不是shell,并>>作为参数提供给命令 - 与command '>>' file在 shell 中运行的方式相同。

某些版本的 SSH (OpenSSH_5.9) 将自动调用远程服务器上的 shell,并在检测到要由诸如; > >>等的 shell 解释的令牌时将命令传递给它。


Tim*_*imo 5

避免ssh-copy-id

摘自对原始海报(OP)问题的回答/评论:

1. 带重定向(开头为 ssh)

ssh <user>@<host> 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

2. 使用管道(ssh不在开头)

cat ~/.ssh/id_rsa.pub | ssh <user>@<host> 'cat >> ~/.ssh/authorized_keys'
Run Code Online (Sandbox Code Playgroud)