【问题标题】:What, exactly, does ssh-copy-id do?ssh-copy-id 到底是做什么的?
【发布时间】:2014-05-07 04:56:20
【问题描述】:

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

我比较了我将 .pub 剪切并粘贴到其中的 authorized_keys 文件的内容与随后使用 ssh-copy-id 的内容,我没有看到两者之间有任何区别,包括空格。

除了将公钥复制到授权密钥中之外,ssh-copy-id 还有什么作用吗?

【问题讨论】:

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

标签: ssh ssh-keys


【解决方案1】:

这个小小的衬线脚本适用于 sh、bash 和 zsh。每次没有 ssh-copy-id 时我都会使用它,例如当我使用旧版本的 OSX 时。

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

工作原理

我正在使用cat 命令将公钥发送到 Unix 标准输出 (STDOUT)。然后我将cat 的STDOUT 连接到ssh 的标准输入(STDIN)。

ssh 在服务器上执行cat 命令。还记得我们现在在 STDIN 中有我们的密钥吗?此密钥从 ssh 传递到在服务器上执行的 cat 命令。 &gt;&gt; 运算符将 cat 的 STDOUT 重定向到 ~/.ssh/authorized_keys 文件的末尾。这样,公钥中的密钥就会附加到服务器上的authorized_keys

IMO 这比手动复制和粘贴要好:在这种情况下,您确切知道文件中最终会出现什么内容

【讨论】:

    【解决方案2】:

    我通常按照您的描述将密钥复制粘贴到 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 安全上下文。我不必运行它,但在你的情况下它可能是必要的。

    【讨论】:

    • 仅供参考,我在github.com/centic9/generate-and-send-ssh-key 创建了一个小脚本,它可以一次性运行必要的步骤,另外还确保了通常总是让我头疼的所有文件/目录权限...
    • @JacksonPauls 您能否提供此声明的来源:“如果您正在创建文件,则需要chmod 600 ~/.ssh/authorized_keys”?我在脚本中搜索并没有看到任何类似的代码。我在测试时也遇到了不一致的结果。
    猜你喜欢
    • 2015-08-06
    • 2013-09-02
    • 2014-01-02
    • 2013-10-10
    • 2017-05-08
    • 2022-01-20
    • 2012-10-17
    • 2017-06-15
    • 2011-05-20
    相关资源
    最近更新 更多