配置步骤
发现百度AI不是一般的垃圾,生成的内容很多都是从csdn抄过来的,内容乱七八糟一点都不精华。还是得自己写一篇。
准备工作
首先检查本地电脑~/.ssh/下面有没有id_rsa和id_rsa.pub这2个文件(或者id_ed25519和id_ed25519.pub),没有的话通过ssh-keygen生成一个。
登录服务器
先密码登录你的服务器,然后vim ~/.ssh/authorized_keys,将前面id_rsa.pub文件的内容复制并粘贴到最后(注意是带.pub后缀的文件,不要搞错了),然后保存。
测试
本地登录测试ssh -p 你的端口 用户名@服务器IP,不出意外的话不用输入密码已经登录进来了。
进一步简化
修改本地~/.ssh/config文件(没有就新建),添加如下内容:
Host 你的别名
HostName 服务器IP或host
Port 服务器端口
User 服务器用户名
其实本来还有个
IdentityFile ~/.ssh/id_rsa的配置,由于一般大家都是用这个默认路径,所以也不用配置。
此时,你只需要ssh 你的别名就可以免密登录你的服务器了。
如果仍需要密码登录
今天被这个问题坑了很久,按照如下步骤自查吧。
目录权限问题
# 查看权限,权限过大或者设置不当会导致ssh忽略这些文件
stat -c "%a %n" /root # 期望值 700
stat -c "%a %n" /root/.ssh # 期望值 700
stat -c "%a %n" /root/.ssh/authorized_keys # 期望值 600
如果不是上述权限,修改权限:
# 修复权限
chmod 700 /root
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
服务器未开启公钥认证
# 确保没有被注释,以及路径正确
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
修改后需reload:
# CentOS/RHEL
systemctl reload sshd
# Debian/Ubuntu
systemctl reload ssh
openssh版本不兼容
我今天碰到的核心问题来自这里,本地openssh版本较高,服务器比较旧,本地和服务器分别执行ssh -V:
# 本地
local .ssh % ssh -V
OpenSSH_9.6p1, LibreSSL 3.3.6
# 服务器
[server]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
对于CentOS7(OpenSSH7.4)等老旧系统:优先 RSA,谨慎使用 ed25519 ,rsa的兼容性更好。刚开始我用的是 ed25519,换成 rsa后就可以了,问题解决。
