SSH私钥在某些目录中不起作用

我有一个奇怪的问题,如果密钥文件在特定的目录中,SSH将不能正确连接私钥。 我已经设置了一组服务器上的密钥和下面的命令

ssh -i /root/privatekey [email protected] 

工作正常,我login到给定的主机没有得到密码提示,但这个命令:

 ssh -i /etc/keyfiles/privatekey [email protected] 

给我一个密码提示。 我缩小了这种行为只发生在/ etc /的一些子目录中。 例如/etc/httpd1/给我一个密码提示,但是/etc/httpd/不是。

我到目前为止检查的是:

  • 所有使用的私钥文件是相同的(从原始文件复制)。
  • 使用的私钥文件和目录具有相同的权限。
  • 服务器/客户端日志中没有相关的错误消息。
  • 没有有趣的debugging信息从ssh -v (它似乎只是跳过密钥文件)。
  • 它发生在连接到不同的主机。

经过更多的testing,它不是实际的目录名称。 例如:

 mkdir /etc/test cp /root/privatekey /etc/test ssh -i /etc/test/privatekey [email protected] # Results in password prompt cp /root/privatekey /etc/httpd # Existing directory ls -ald test httpd # drwxr-xr-x 4 root root 4096 Mar 5 18:25 httpd # drwxr-xr-x 2 root root 4096 Mar 5 18:43 test ssh -i /etc/httpd/privatekey [email protected] # Results in *no* prompt rm -r test cp -R /etc/httpd /etc/test ssh -i /etc/test/privatekey [email protected] # Results in *no* prompt` 

我确定它只是简单的我忽略了,但我很茫然。

我build议在连接时查看'ssh -vvv'输出。 还要在/ etc / ssh / sshd_config中将日志级别提高到DEBUG。 这应该给你一些关于发生了什么的想法。

是你的一些子目录链接和一些真实的目录? 我认为这是一个奇怪的权限问题。

可能的原因是目录的权限和所有权。 ssh是偏执狂,拒绝一个基于父目录权限的密钥以及密钥和包含它的目录的权限。

我在我的环境中安装:

  ln -fs $(PWD)/ssh3 $(INSTALL_DIR)/.ssh # Make sure the permissions are OK; ssh is paranoid chmod 700 ssh3 find ssh3/ -type f -exec chmod 600 {} \; 

已知在CentOS 4和5上工作。