我们有一些脚本需要在不输入密码的情况下进行 rsync。我试图通过 SSH 连接到本地计算机(本身)。我无法让它工作。它总是要求我输入密码。通过 SSH 连接到远程计算机可以正常工作。
我正在运行 CentOS 6。用户的主目录位于非标准位置(即它不在 /home/$USER 下)。
以下是我为尝试实现此目的而采取的措施。
我使用创建了私钥
ssh-keygen -t rsa -C "servername.domain"
没有密码。
将生成的公钥复制到 ~/.ssh/authorized_keys 并尝试使用 SSH
ssh servername.domain
并且要求我输入密码。我尝试使用该文件的权限,但没有成功。
我注意到当我使用密码进行 SSH 时,/var/log/secure 日志文件中会出现此错误。不确定这是否相关,但错误如下。
Feb 12 09:15:34 servername unix_chkpwd[14652]: password check failed for user
执行 ssh -v 并比较无需输入密码(远程)的 seesion 和始终提示输入密码的 seesion(本地)的结果时,我可以看到一些差异。首先是失败显示:
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
而工作会话仅显示第一行,后面两行并不存在。
后来我看到:
debug1: Offering public key: /myuser/.ssh/id_rsa
在工作版本中,接下来是:
debug1: Server accepts key: pkalg ssh-rsa blen 277
而在失败的版本中,其后跟着:
debug1: Trying private key: /myuser/.ssh/id_dsa
debug1: Next authentication method: password
后来我发现禁用 selinux 后 SSH 就可以正常工作。我认为问题可能是由于用户主目录的位置不标准造成的。
答案1
.ssh
当您使用密钥时,如果目录和/或文件的权限authorized_keys
不正确,则 ssh 将回退到密码(如果允许的话)(PasswordAuthentication Yes
)。
检查 ~./ssh 上的权限是否为 700,以及 ~/.ssh/authorized_keys 权限是否为 644(或更严格)。
由于您已确定 SElinux 是导致问题的原因,并且您表示用户主目录位于非标准位置,因此请检查 /var/log/audit/audit.log 中是否存在相关的 AVC 拒绝消息。
您也可以尝试重新标记相关的目录树
semanage fcontext -a -t user_home_t "/path/to/homedir(/.*)?"
restorecon -r /path/to/homedir