ssh 返回“ ~/.ssh/config 上的所有者或权限错误”

Rob*_*ert 520 ssh file-permissions

当我尝试 ssh 到另一个盒子时,出现这个奇怪的错误

$ ssh hostname
Bad owner or permissions on ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

但我确保我拥有该文件并拥有 rw 权限:

ls -la ~/.ssh/
total 40K
drwx------ 2 robert robert 4.0K Mar 29 11:04 ./
drwx------ 7 robert robert 4.0K Mar 29 11:04 ../
-rw-r--r-- 1 robert robert 2.0K Mar 17 20:47 authorized_keys
-rw-rw-r-- 1 robert robert   31 Mar 29 11:04 config
-rw------- 1 robert robert 1.7K Aug  4  2010 id_rsa
-rw-r--r-- 1 robert robert  406 Aug  4  2010 id_rsa.pub
-rw-r--r-- 1 robert robert 6.1K Mar 29 11:03 known_hosts
Run Code Online (Sandbox Code Playgroud)

Rob*_*ert 810

我需要只有用户才能拥有 rw 对配置的权限。这修复了它。

chmod 600 ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

正如其他人在下面指出的那样,它可能是文件所有者。(给他们点赞!)

chown $USER ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

  • 有时不仅是权限,还有所有者可能会导致问题;就我而言,我也必须这样做:`chown -R robert:robert ~/.ssh` (27认同)
  • 就我而言,从 644 到 600 成功了。 (8认同)
  • 只要读权限就足够了,即`400` (4认同)
  • 对我来说,`600` 不起作用,只有 `400`(在 Ubuntu Xenial 上) (2认同)
  • 令我惊讶的是,660 被认为是“~/.ssh/config 上的所有者或权限错误”,但 600 则不然。谢谢! (2认同)
  • “你必须是唯一可以读取或写入该文件的人”,正如 @simpleuser 所说(以及大多数其他人所说)是准确的。措辞很重要,因为还有另一种方法可以解决这个问题:如果您将另一个帐户添加到您的组中(请参阅/etc/groups),您将不再是唯一的用户。这个怪癖既没有显示在“~/.ssh/*”的权限中,也没有显示在所有者中 (2认同)
  • 我是在想。什么样的事情会导致这些权限被逆转?我回到我的终端,惊讶地发现我无法再访问我的 Git 存储库(解决方案解决了这个问题)。有没有搞错? (2认同)

ken*_*orb 101

这些命令应该可以解决权限问题:

chown $USER ~/.ssh/config
chmod 644 ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

sudo如果文件由不同的用户拥有(或者您无权访问它们),请添加前缀。

如果更多文件受到影响,请替换config*.

man ssh我们可以读到:

由于存在滥用的可能性,此文件必须具有严格的权限:用户读/写,其他人不可写。如果所讨论的组仅包含用户,则它可以是组可写的。

  • 这对我有用。我正在使用 cygwin 并且 cygwin .ssh 符号链接到 Windows 用户 .ssh。我必须在 cygwin 窗口中运行这些命令。 (4认同)

小智 16

对我来说,这是我的用户帐户不是文件所有者的问题

sudo chown myuser ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)


Nat*_*idd 12

如果在适用于 Linux 的 Windows 子系统 (WSL) 上,并且您将 WSL 主目录指向 Windows 主目录(不推荐!),则 chmod 无效。在您可以chmod添加其他答案中提到的文件之前,您必须添加

[automount]
options = "metadata"
Run Code Online (Sandbox Code Playgroud)

/etc/wsl.conf再重启WSL(需要建造17093或更高版本)。

挂载前说:

C: on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000,case=off)
Run Code Online (Sandbox Code Playgroud)

挂载后说:

C: on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000,metadata,case=off)
Run Code Online (Sandbox Code Playgroud)

  • 我在 Windows 10 版本 1903 上,WSL 中的 chmod 刚刚工作。 (3认同)