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

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

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

$ 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 所需的基本信息。

相关内容