如何更改 ssh 密钥的密码

如何更改 ssh 密钥的密码

当我尝试更改 ssh 密钥的密码时,收到以下错误消息:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/username/.ssh/id_rsa' are too open. 
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

这是什么意思?我怎样才能解决这个问题?

编辑:这解决了我的问题

sudo chmod 600 ~/.ssh/id_rsa

答案1

虽然 fftcc 的答案为您提供了如何使您的权限符合 ssh 要求的详细说明,但了解它可能会很有用只是为什么这些要求是存在的。

您可以将一对私钥/公钥视为秘密和一个测试

秘密就是私钥:只有您知道。它就像一把门钥匙。它恰好适合一把锁。锁测试秘密:公钥可以验证私钥。 (实际的密码学更有趣:公钥可以在不知道私钥的情况下测试私钥,而门锁则无法做到这一点。)

门锁是公开的:每个人都可以看到它并尝试将钥匙插入其中(相信我,他们会这样做),但它只会接受正确的一把。

如果你让人们复制私钥(或你的门钥匙),他们就可以进入你的服务器(或你的房子)。因此,没有人可以读取该私钥。

正如另一个答案中所解释的,在秘密之上的任何目录中的写入权限都可以让用户递归地获取权限,直到到达秘密,这就是为什么 ssh 甚至对其之上的用户主目录也提出了要求,这乍一看似乎很奇怪。顺便说一句,我不确定 ssh 是否只是假设或检查用户主目录上方的目录也对公众进行写保护:当然,这是典型的设置,但不一定是给定的。

根据这些原则,各种文件的必要权限是最有意义的。会出现一定的复杂性,因为人们会假设某些文件(例如authorized_keys),特别是在服务器端,需要第三方读取访问权限,以便 sshd 可以读取它们。但 sshd 以 root 身份运行——毕竟,它在特权地址上打开一个套接字——并且可以读取任何它想要的内容,而与文件权限无关。

顺便说一句,这意味着您的本地系统管理员实习生可以读取您用于访问比特币钱包的密钥,chmod 600 my butt。因此,可以对您的私钥进行加密,这乍一看似乎是多余的,但如果您见过我们的管理员,那就完全有意义了。这个问题实际上与私钥加密有关;许可问题纯粹是偶然的。

答案2

从手册页:

ssh-keygen -p [-f keyfile] [-m format] [-N new_passphrase]
                   [-P old_passphrase]

检查该文件必须具有正确的权限。

答案3

sudo ssh-keygen -f ~/.ssh/YOU_PRIVATE_SSH_KEY -p

如果终端显示该消息Permissions 0644,则运行命令root

如果终端显示消息failed: Permission denied

要解决权限问题,首先需要为主目录和目录设置正确的所有权和权限.ssh1

sudo chown -R user:user $HOME sudo chmod 750 $HOME sudo chmod -R 700 $HOME/.ssh 这将为 .ssh 中的所有文件创建满足 SSH 要求所需的权限。下面列出了各个目录 files.ssh 的 SSH 建议和要求(下划线)(来自手册页):

~/.ssh/id_rsa (或任何 PRIV KEY — 私有、主密钥) — 这些文件包含敏感数据 [即您的身份验证密钥],用户应该可读,但其他人无法访问(读/写/执行) —例如0600。如果私钥文件可以被其他人访问,ssh 程序将简单地忽略该私钥文件。

sudo chmod 600 ~/.ssh/id_rsa

~/.ssh/config — 由于可能被滥用,该文件必须具有严格的权限:用户读/写,其他人不可写 — 安装 0644 就足够了。

sudo chmod 644 ~/.ssh/config

~ /.ssh/authorized_keys — 该文件敏感度不高,但建议用户读写权限为0644,其他人不可写。2

sudo chmod 644 ~/.ssh/authorized_keys

~ /.ssh/known_hosts — 该文件不是高度敏感,但建议用户具有读写权限,而其他人则为只读,因此为 0644。

chmod 644 ~/.ssh/known_hosts

~/.ssh/ — 没有一般要求对该目录的所有内容保密,但建议的读/写/执行权限是针对用户的,其他人无法访问 — 0700 就足够了。

sudo chmod 700 ~/.ssh

~ / .ssh /id_rsa.pub (或任何公钥) - 这些文件不是机密的,任何人都可以(但不一定)读取。


1对目录的写权限允许用户更改其包含的文件和目录的权限。.ssh包含秘密私钥,除了所有者之外,任何人都不得知道。如果其他用户对包含的目录 ( .ssh) 具有写入权限,他们可以更改该目录中密钥的权限并读取该文件。该参数递归地应用到文件系统根目录。

2即使authorized_keys不包含严格秘密— 其中的所有密钥都是公开的 — 它指定谁可以登录:任何拥有(未知但可验证)的人私钥与文件中列出的公钥关联。因此,对authorized_keys 的写入权限必须仅限于帐户所有者。

相关内容