配置免密ssh登录服务器
本文由 小茗同学 发表于 2024-04-14 浏览(1677)
最后修改 2026-06-04 标签:ssh

配置步骤

发现百度AI不是一般的垃圾,生成的内容很多都是从csdn抄过来的,内容乱七八糟一点都不精华。还是得自己写一篇。

准备工作

首先检查本地电脑~/.ssh/下面有没有id_rsaid_rsa.pub这2个文件(或者id_ed25519id_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后就可以了,问题解决。