我正在尝试使用以下步骤在我的网络服务器和报告服务器之间设置无密码身份验证。它在我的开发环境中运行良好,但在客户环境中却不行。
脚步 :
以 Web 服务器上的 testUser 用户身份执行:
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen (use default file location and empty passphrase)
ssh-keygen -t dsa (as before)
将生成的公钥传输到报告服务器。
作为 testUser 用户 -
sftp testUser@<ReportServerName>
put id_dsa.pub
put id_rsa.pub
quit
在报告服务器上执行以下步骤。
作为 testUser 用户
mkdir ~/.ssh
cd ~/.ssh
cat ~/id_rsa.pub >> authorized_keys
cat ~/id_dsa.pub >> authorized_keys2
rm ~/id_*.pub
chmod 644 auth*
以 root 用户身份 vi /etc/ssh/sshd_config
取消注释“PubkeyAuthentication yes”
/etc/init.d/sshd restart
完成这些步骤后,当我尝试 sftp testUser@ 时,它仍然要求我输入密码。
有人可以帮忙吗?
答案1
这里可能存在多个陷阱。由于您自己创建了目录,因此权限可能不正确。
以下权限是必需的:
- 该
~/.ssh
目录不应由除所有者之外的任何人读取,因此通常chmod 700
。它一定不是可写除所有者之外的任何人。 - 私钥文件一定不是可读或可写由除所有者以外的任何人执行,因此通常
chmod 600
.ssh-keygen
已经为您完成了该操作。 - 文件
~/.ssh/authorized_keys
一定不是可写除所有者之外的任何人都可以访问,因此至少chmod 644
。(根据定义,公钥不是秘密!)
如果有疑问:sshd
以调试模式运行。它将保持连接到终端:
sudo /usr/bin/sshd -p 2222 -d
然后,从您的客户端连接端口 2222:
ssh -p 2222 my-ssh-server
服务器将记录遇到的任何错误。可能如下所示:
身份验证被拒绝:目录 /home/fuzz/.ssh 的所有权或模式错误
答案2
有多个调试步骤:
- 检查两边的日志。很有可能
/var/log/auth.log
。 - 以详细模式运行您的 ssh 连接
ssh -v
。 - 检查从 '/' 到每个目录的访问权限
~/.ssh
。这些目录均不可写。
您可以使用这两行测试访问。(假设 root 权限正常)。
cd ~/.ssh; DIR=$PWD
while [ $DIR != '/' ]; do ls -ld $DIR; DIR=$(dirname $DIR); done