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

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

我遇到了一个奇怪的问题,如果密钥文件位于某些目录中,SSH 将无法正确连接私钥。我在一组服务器上设置了密钥,以下命令

ssh -i /root/privatekey [email protected]

工作正常,我登录到给定的主机而不需要输入密码,但是这个命令:

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

提示我输入密码。我已将范围缩小到此行为仅发生在 /etc/ 的某些子目录中。例如,/etc/httpd1/提示我输入密码,但/etc/httpd/没有。

到目前为止我已经检查过:

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

经过更多测试后,它并不是实际的目录名称。例如:

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`

我确信这只是我忽略的一些简单的事情,但我很茫然。

答案1

我建议在连接时查看“ssh -vvv”输出。同时将 /etc/ssh/sshd_config 中的日志级别增加到 DEBUG。这应该能让您了解发生了什么。

您的一些子目录是链接还是真实目录?我认为这一定是某个地方存在某种奇怪的权限问题。

答案2

可能的原因是目录的权限和所有权。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 上运行。

相关内容