基本流程
- 控制端(本地)生成公钥和私钥;
- 将公钥传至被控制端(远程服务器);
具体流程参考这篇文章。
问题解决
如果做完上面那一步,你已经可以成功免密连接上SSH,那么恭喜你,但是实际情况中总是会遇到各种各样的问题,下面给出一些排除问题的思路。
- 在本地SSH配置文件添加
IdentityFile
路径
私钥地址应填写到了Host 192.168.1.100 HostName 192.168.1.100 User timer IdentityFile C:\Users\xxx\.ssh\id_rsa
.ssh\id_rsa
这个文件的路径,而不能仅仅是.ssh
的路径。 - 检查远远程服务器端
~/.ssh
和~/.ssh/authorized_keys
的权限
原因是SSH不希望用户目录和~/.ssh目录对组有写权限。
确认.ssh目录权限必须是700
确认authorized_keys文件权限必须是600
如果不是,执行以下代码chmod 700 ./.ssh chmod 600 ./.ssh/authorized_keys
- 修改
StrictModes
属性为no
将/etc/ssh/sshd_config
文件中StrictModes
属性设置为no
,如果没有自行添加StrictModes no
- 启用
AuthorizedKeysFile
配置
在/etc/ssh/sshd_config
文件中配置AuthorizedKeysFile
路径为%h/.ssh/authorized_keys
,注意前面是%h
,不是~
。AuthorizedKeysFile %h/.ssh/authorized_keys
- 确认
PubkeyAuthentication
配置开启
确认/etc/ssh/sshd_config
文件中PubkeyAuthentication
属性设置为yes
PubkeyAuthentication yes
- 重启SSH服务
对/etc/ssh/sshd_config
文件修改确认后,执行以下命令可验证配置文件语法是否正确(非必需)
执行以下命令重启SSH服务sshd -t
然后,重试SSH登陆命令service sshd restart
- 如果没有解决可尝试使用执行
sudo cat /var/log/secure
查看系统的安全日志,根据具体日志内容解决。 - Could not load host key: /etc/ssh/ssh_host*
希望大家可以顺利解决问题,对我而言最重要的是修改StrictModes
属性为no
和启用AuthorizedKeysFile
配置。
参考资料
- 通过添加公钥实现ssh免密登录服务器(authorized_keys、sshd_config)_autodl免密登陆_Data-Mining的博客-CSDN博客
- vscode远程开发,含ssh密钥配置(免密登录)、客户端多私钥配置。_vscode ssh 密钥-CSDN博客
- Sshd_config配置文件详解–很实用_sshd_config是什么文件-CSDN博客
- Linux之sshd_config配置文件说明及实践-CSDN博客
- Could not load host key: /etc/ssh/ssh_host*_ecdsa_ke-CSDN博客
- Ubuntu 设置 SSH 通过密钥登录 - 知乎
- 配置vscode 远程开发+ 免密登录 - 知乎