我遇到了一个奇怪的问题,如果密钥文件位于某些目录中,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 上运行。