SSH无密登录配置¶
Linux免密登录核心基于非对称加密(公钥/私钥) 机制,简单说就是「把公钥存在目标服务器,用本地私钥做身份验证」,全程无需输入密码。
核心原理¶
- 本地(
node1)生成一对密钥(公钥+私钥);
- 将(
node1)公钥放到要免密登录的目标Linux服务器(node2)上(~/.ssh/authorized_keys);
node1登录node2时,
本地用私钥加密一段随机信息发给服务器,服务器用已保存的公钥解密,验证通过后直接登录,全程无密码交互。
核心验证流程¶
Linux免密登录本质是SSH协议的公钥认证方式,替代了默认的密码认证,交互流程极简:
1. 本地发起请求:客户端(本地)向目标服务器发送SSH登录请求,告知要使用公钥认证;
2. 服务器挑战验证:服务器从本地公钥存放目录(~/.ssh/authorized_keys)查找对应客户端的公钥,若存在,生成一段随机字符串,用该公钥加密后发给客户端;
3. 客户端解密应答:客户端收到加密字符串,用本地唯一的私钥解密,将解密后的字符串发回服务器;
4. 服务器确认登录:服务器对比发出去的随机字符串和客户端发回的结果,一致则验证通过,直接建立连接(不一致则拒绝)。
sequenceDiagram
participant 客户端
participant 服务器
Note over 客户端,服务器: 前置:客户端公钥已存入服务器authorized_keys
客户端->>服务器: 发起SSH登录,请求公钥认证
服务器->>客户端: 生成随机串,用客户端公钥加密后发送
客户端->>客户端: 本地私钥解密随机串
客户端->>服务器: 发送解密后的原始随机串
服务器->>服务器: 对比随机串一致性
服务器->>客户端: 验证通过,建立SSH免密连接
关键细节(避坑必备)¶
- 密钥的特性
- 公钥(
id_rsa.pub):公开无风险,可随意复制到任意目标服务器,仅用于加密; -
私钥(
id_rsa):绝对保密,仅存于本地客户端,不可泄露/传输,仅用于解密,泄露后他人可免密登录你的目标服务器。 -
核心文件作用
- 本地:
~/.ssh/id_rsa(私钥)、~/.ssh/id_rsa.pub(公钥),由ssh-keygen命令生成; -
目标服务器:
~/.ssh/authorized_keys(公钥库),存放所有可免密登录该服务器的客户端公钥,一行一个公钥。 -
权限要求(最易踩坑) SSH协议对相关目录/文件权限有严格限制(防止被篡改),否则免密登录会失败:
- 本地/服务器:
~/.ssh目录权限必须是700(仅所有者可读可写可执行); - 服务器:
authorized_keys文件权限必须是600(仅所有者可读可写); - 服务器:用户家目录(
~)权限不能是777(避免其他用户修改)。
免密登录的扩展¶
- 可给私钥设置密码(passphrase):生成密钥时添加密码,本地首次使用私钥需输入一次,后续可通过
ssh-agent缓存,既保证私钥安全,又不影响免密体验; - 多机免密互通:集群场景下(如Hadoop/Spark集群),需将每台机器的公钥互相添加到其他机器的
authorized_keys,实现集群内任意机器互登免密。