这是我尝试过的,但出现错误:
$ cat /home/tim/.ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
答案1
OpenSSH 附带了一个命令来执行此操作,ssh-copy-id
.您只需给它远程地址,它就会将您的公钥添加到authorized_keys
远程计算机上的文件中:
$ ssh-copy-id [email protected]
您可能需要使用该-i
标志来在本地计算机上找到您的公钥:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
答案2
你总是可以做这样的事情:
scp ~/.ssh/id_rsa.pub [email protected]:/tmp/id_rsa.pub
ssh [email protected]
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
我不确定您是否可以cat
从本地计算机进入 ssh 会话。只需按照建议将其移动到 /tmp 即可。
编辑:这正是ssh-copy-id
所做的。正如迈克尔所说。
答案3
该答案描述了如何使问题中显示的预期方式发挥作用。
您可以在远程计算机上执行 shell 来解释>>
重定向运算符的特殊含义:
ssh [email protected] sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
重定向运算符>>
通常由 shell 解释。
当您执行时ssh host 'command >> file'
,不保证command >> file
会被 shell 解释。在你的情况下command >> file
被执行反而shell 的运行方式,无需特殊解释,并>>
作为参数提供给命令——与command '>>' file
在 shell 中运行的方式相同。
;
>
>>
某些版本的 SSH (OpenSSH_5.9) 将自动调用远程服务器上的 shell,并在检测到要由 shell等解释的令牌时将命令传递给它。
答案4
openssh
确实提供ssh-copy-id
。顺序是:
生成一个像样的 4k 密钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
启动你的 ssh-agent 并吸收诸如
SSH_AGENT_PID
等的信息。ssh-agent -s > ~/mysshagent source ~/mysshagent rm ~/mysshagent
现在开始将密钥加载到您的 SSH 代理中
ssh-add ~/.ssh/id_rsa4k
检查是否已加载
ssh-add -l ssh-add -L
这将显示 ssh-agent 中的内容
现在实际上通过 SSH 连接到远程系统
ssh [email protected]
现在您可以不带参数运行 ssh-copy-id:
ssh-copy-id
这将创建
~/.ssh/authorized_keys
并填写 ssh-agent 所需的基本信息。