我刚刚生成了一个 ssh 密钥,之后我尝试复制 id_rsa.pub,但它抛出一个错误,说目录不存在。有人能帮帮我吗?
user$ sudo pbcopy <~/.ssh/id_rsa.pub
-bash: /Users/user/.ssh/id_rsa.pub: No such file or directory
答案1
我怀疑您生成密钥的位置和您尝试加载密钥的位置不匹配。
当您运行命令时sudo pbcopy <~/.ssh/id_rsa.pub
,发生的事情是您正在以(因为)的身份运行该pbcopy
命令,但是该文件是由您当前用户下运行的当前提示符加载的,因此解析为您当前用户的主目录。root
sudo
bash
~
如果您使用 生成密钥ssh-keygen
,它会将密钥放入~
当前用户的 中。由于您当前的用户是你,一切都恰到好处。
如果你使用生成密钥sudo ssh-keygen
,则意味着ssh-keygen
运行作为root
用户,因此您的密钥实际上位于root
的主目录下(~root/.ssh/id_rsa.pub
或/root/.ssh/id_rsa.pub
默认情况下)。
这里有两种可能的解决方案。选择哪一种取决于你想做什么:
您可以使用以下命令为自己的用户生成密钥
ssh-keygen
没有。sudo
这将使您的原始命令能够工作。或者,你可以将密钥保留在下面
root
,但这意味着你必须加载它从需要 root 权限才能使用它。要使用 shell 重定向操作符,您需要以 身份运行整个 shellroot
,例如sudo sh -c 'pbcopy <~/.ssh/id_rsa.pub'
哪种解决方案更合适取决于您的要求以及您打算将来做什么。您以 身份运行的每个命令sudo
都会看到 下的密钥root
,而您以 身份运行的命令sudo
将看到您当前用户下的密钥。例如,如果您运行ssh
它将在 中查找~/.ssh
当前用户的密钥,而将在中sudo ssh
查找 的密钥。~/.ssh
root