问题 究竟什么是ssh-copy-id呢?


ssh-copy-id命令到底是做什么的?我已经多次使用它并且效果很好。但是,当我尝试手动剪切并粘贴我的.pub密钥文件到我的远程authorized_keys时,它不起作用。

我已经比较了我已经剪切并粘贴.pub的authorized_keys文件的内容,后来使用了ssh-copy-id,我没有看到两者之间有任何差异,包括空格。

除了将公钥复制到authorized_keys之外,还有什么ssh-copy-id?


4932
2018-03-27 22:45


起源

你有没有检查是否有权限 authorized_keys 设置正确吗? - Rufflewind
是的,目录和authorized_keys的权限都是正确的。 ssh-copy-id插入与剪切和粘贴相同的文件中,因此文件环境相同。我很好奇是否有任何其他动作,ssh-copy-id会“激活”远程服务器上的密钥。如果没有,我需要弄清楚我的剪切和粘贴是如何改变公钥的。 - DanHeidel
也许一试 diff 您的版本和自动版本之间?手册页 ssh-copy-id 并没有说它做了什么。加, ssh-copy-id 它只是一个普通的shell脚本,因此您可以检查它的作用。 - Rufflewind


答案:


这个小命令真的应该有效。我每次没有ssh-copy-id时都会使用它,例如当我在Mac上时。

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'

IMO它比手动复制和粘贴更好:在这种情况下,您确切地知道哪些内容将最终存在于文件中


8
2017-12-02 11:36



缺少结束引号 - BryanK
oopsy!谢谢,修好了 - ganqqwerty


我通常会将密钥复制粘贴到authorized_keys中(我忘记了) ssh-copy-id),所以它可以工作。注意chmod 600 ~/.ssh/authorized_keys 如果您正在创建文件,则是必需的。

ssh-copy-id 是一个shell脚本,因此您可以在文本编辑器中打开它以查看它的作用,这看起来像相关的位:

printf '%s\n' "$NEW_IDS" | ssh "$@" "
    umask 077 ;
    mkdir -p .ssh && cat >> .ssh/authorized_keys || exit 1 ;
    if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi"

的restorecon 在最后一行中恢复默认的SELinux安全上下文。我没有必要这样做,但在你的情况下可能是必要的。


5
2018-03-07 15:56



仅供我,我创建了一个小脚本 github.com/centic9/generate-and-send-ssh-key 它一次性运行必要的步骤,并另外确保所有文件/目录权限,这通常总是让我头疼... - centic