![ssh 无法使用密钥,但密码有效](https://linux22.com/image/1354363/ssh%20%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%E5%AF%86%E9%92%A5%EF%BC%8C%E4%BD%86%E5%AF%86%E7%A0%81%E6%9C%89%E6%95%88.png)
我有一个为 SCM 运行的 Ubuntu 服务器,并且正在 Windows 计算机上进行开发。此设置已运行很长时间,没有任何问题。但现在我遇到了一个奇怪的问题。
当我需要更改服务器上 git 存储库的访问权限时,问题就开始了(不要告诉我这对chmod
整个主目录来说很愚蠢......我已经知道了)。 之后,每次我尝试使用我的公钥通过 ssh(包括 git)访问服务器时。 我收到以下错误:
$ ssh[电子邮件保护] 打开日志失败:权限被拒绝 与 192.168.0.240 的连接已关闭。
但是,当我尝试仅使用密码连接到服务器时,一切都按预期工作:
我尝试使用 -vvv 运行 ssh 命令。它没有告诉我在哪里可以找到问题。也许你可以从中发现一些东西。
... debug2: 通道 0: 请求 shell 确认 0 debug2:fd 3 设置 TCP_NODELAY debug2:回调完成 debug2:通道 0:打开确认 rwindow 0 rmax 32768 调试2:通道0:rcvd调整2097152 调试2:通道0:接收扩展数据35 debug2: 通道 0: rcvd eof 调试2:通道0:输出开路->漏极 debug1:client_input_channel_req:通道 0 rtype 退出状态回复 0 debug2:通道 0:rcvd 关闭 调试2:通道0:close_read debug2:通道 0:输入打开 -> 关闭 debug3:通道0:关闭后不会发送数据 debug2:通道 0:obuf_empty 延迟 efd 6/(35) 打开日志失败:权限被拒绝 debug2:通道 0:将 35 写入 efd 6 debug3:通道0:关闭后不会发送数据 debug2:通道 0:obuf 为空 调试2:通道0:close_write debug2:通道 0:输出漏极 -> 关闭 debug2:通道 0:几乎死机 debug2:通道 0:gc:通知用户 debug2:通道 0:gc:用户已分离 debug2:通道0:发送关闭 debug2:通道 0:已死 debug2:通道 0:垃圾收集 debug1:通道 0:空闲:客户端会话,nchannels 1 debug3:通道 0:状态:以下连接已打开: #0 客户端会话(t4 r0 i3/0 o3/0 fd -1/-1 cfd -1)
有任何想法吗?
答案1
你的问题可能是你的用户密钥的权限错误。在 Ubuntu 服务器上尝试以下操作:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa ~/.ssh/authorized_keys
chmod 644 ~/.ssh/id_rsa.pub
答案2
此外terdons 的回答,如果 ssh 密钥~
可被其他人写入,也会出现一些奇怪的行为。
假设您已成功设置 ssh 以使用密钥登录:
user@local:~> ssh remote
Last login: Thu Mar 7 17:39:18 2013 from local
user@remote:~>
现在让你的主目录可以被其他用户写入偏僻的机器:
user@remote:~> getfacl .
# file: .
# owner: user
# group: users
user::rwx
group::r-x
other::r-x
user@remote:~> setfacl -m u:coauthor:rwx .
user@remote:~> exit
user@local:~>
好的,现在再次尝试登录远程:
user@local:~> ssh remote
user@remote's password:
ssh
现在提示输入密码!删除 ACL,ssh 密钥就可以再次使用了。
[我的解决方法是使用子目录进行协作。]
克雷格桑德斯知道原因,此行为取决于StrictModes yes
sshd_config。引用man 5 sshd_config
:
严格模式 指定 sshd(8) 是否应在接受登录之前检查文件模式以及用户文件和主目录的所有权。这通常是可取的,因为新手有时会意外地将其目录或文件置于可写入状态。默认值为“是”。