配置与权限已设置但SSH仍要求输入密码的问题求助
我有一台Contabo远程服务器和一台Dell本地主机,已在服务器上创建sudo用户laura:
adduser laura usermod -aG sudo laura
在Dell主机上执行ssh-keygen -t rsa -b 4096生成SSH密钥(命名为id_rsa_contabo和id_rsa_contabo.pub),因ssh-copy-id无效,使用sudo scp id_rsa_contabo.pub laura@<IP>:/home/laura/.ssh/将公钥传到服务器,手动将其内容追加到/home/laura/.ssh/authorized_keys文件中。但执行ssh laura@<IP>时仍要求输入密码。
已尝试以下操作但无效:
- 将服务器上
.ssh文件夹权限设为700,authorized_keys设为600; - 执行
ssh-agent bash和ssh-add ~/.ssh/contabo_rsa; - 查看服务器
/var/log/auth.log未发现异常; - 执行
ssh laura@161.97.167.13 -v,发现本地未读取id_rsa_contabo密钥; - 尝试
ssh -i id_rsa_contabo.pub laura@161.97.167.13强制使用该密钥; - 确认服务器
/etc/ssh/ssh_config和/etc/ssh/sshd_config中已开启RSAAuthentication、PubkeyAuthentication,配置了正确的AuthorizedKeysFile路径。
1. 修正SSH密钥加载的文件名错误
你执行ssh-add时用了错误的密钥文件名,实际生成的私钥是id_rsa_contabo,正确命令应为:
ssh-add ~/.ssh/id_rsa_contabo
执行后可通过ssh-add -l确认密钥是否已加载成功。
2. 修正ssh -i参数的使用错误
ssh -i参数需要指定私钥文件而非公钥文件,正确命令应为:
ssh -i ~/.ssh/id_rsa_contabo laura@161.97.167.13
如果当前不在~/.ssh目录下,要使用完整路径,避免找不到文件。
3. 配置本地SSH config自动使用指定密钥
为了避免每次手动指定密钥,可在本地~/.ssh/config文件中添加如下配置(若文件不存在则创建,权限设为600):
Host contabo-server HostName 161.97.167.13 User laura IdentityFile ~/.ssh/id_rsa_contabo
之后直接执行ssh contabo-server即可自动使用该密钥登录。
4. 彻底检查服务器端权限
除了.ssh和authorized_keys的权限,还需确保服务器上/home/laura目录的权限不能开放过高,必须设置为755或更严格:
sudo chmod 755 /home/laura
同时确认authorized_keys文件的所有者是laura,而非root:
sudo chown laura:laura /home/laura/.ssh/authorized_keys
如果之前用sudo scp传文件,可能导致文件所有者为root,这会导致SSH拒绝使用该密钥。
5. 重启SSHD服务并验证配置
修改sshd_config后必须重启服务才能生效:
sudo systemctl restart sshd
可通过sshd -t检查配置文件是否有语法错误,避免因配置错误导致服务无法启动。
6. 检查SELinux限制(若服务器启用了SELinux)
如果服务器开启了SELinux,可能会阻止SSH读取authorized_keys文件,可临时关闭SELinux测试:
sudo setenforce 0
若测试有效,可执行以下命令恢复SELinux上下文并永久允许:
sudo restorecon -Rv /home/laura/.ssh
内容的提问来源于stack exchange,提问作者Laura

