Linux 两台服务器 SSH 免密登录完整配置文档(含最终测试\+rsync免密)
## 一、环境说明
A服务器:客户端(发起登录、发起rsync)
B服务器:服务端(被登录、被同步)
适用用户:**root 用户 / 普通用户(oracle、app 等)**
核心原理:客户端生成 RSA 公私钥,将公钥放入服务端对应用户的 `authorized\_keys`,实现无密码登录。
## 二、客户端 A 操作(任意用户)
切换到需要免密的用户(示例为 oracle,root 同理)
```Plain Text
su - oracle
```
### 1\. 生成 RSA 密钥
全程直接回车,不设置密钥密码、不修改路径
```Plain Text
ssh-keygen -t rsa
```
### 2\. 一键推送公钥到 B 服务器(推荐)
默认22端口:
```Plain Text
ssh-copy-id oracle@B服务器IP
```
自定义端口(示例端口58404):
```Plain Text
ssh-copy-id -p 58404 oracle@B服务器IP
```
输入一次 B 服务器对应用户密码,自动完成授权。
### 3\. 无 ssh\-copy\-id 手动配置方案
1)A 查看公钥并复制全部内容
```Plain Text
cat ~/.ssh/id_rsa.pub
```
2)登录 B 服务器,切换对应用户,创建授权文件
```Plain Text
su - oracle
mkdir -p ~/.ssh
vim ~/.ssh/authorized_keys
```
粘贴公钥(**保证一整行、无换行、无空格乱码**)
## 三、服务端 B 关键权限配置(必做,90%报错根源)
无论 root / 普通用户,权限必须严格如下,否则免密失效
```Plain Text
# 普通用户(oracle)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R oracle:oracle ~/.ssh
# root 用户专用
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
chown -R root:root /root/.ssh
```
### 可选关闭拦截(排查必备)
```Plain Text
# 临时关闭SELinux(重启失效)
setenforce 0
# 永久关闭(可选)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
```
### SSH 配置检查(B服务器)
确保开启公钥登录、允许root登录(按需)
```Plain Text
grep -E "PubkeyAuthentication|PermitRootLogin" /etc/ssh/sshd_config
```
确保参数为:
```Plain Text
PubkeyAuthentication yes
PermitRootLogin yes
```
修改后重启ssh:
```Plain Text
systemctl restart sshd || service sshd restart
```
## 四、标准最终测试方法(必做)
**在 A 服务器当前免密用户下执行**
### 1\. 基础免密登录测试
```Plain Text
# 默认22端口
ssh oracle@B服务器IP
# 自定义端口
ssh -p 58404 oracle@B服务器IP
```
✅ 无需输入密码直接登录 = 免密配置成功
### 2\. 详细debug测试(排查报错专用)
```Plain Text
ssh -v -p 58404 oracle@B服务器IP
```
出现 **Authentication succeeded \(publickey\)** 代表认证100%成功
### 3\. Rsync 免密传输测试(生产常用)
自定义端口完整命令(可模糊匹配文件)
```Plain Text
# 单个文件
rsync -avzP -e 'ssh -p 58404' /本地路径/文件名 oracle@BIP:/目标路径/
# 模糊匹配文件
rsync -avzP -e 'ssh -p 58404' /本地路径/*关键字* oracle@BIP:/目标路径/
```
出现 **speedup is x\.xx** 代表传输完成、无报错。
## 五、常见报错与解决方案
### 1\. Connection refused
原因:B服务器sshd未启动 / 端口错误 / 防火墙拦截
解决:启动sshd、放行22端口、核对端口
### 2\. Permission denied \(publickey\)
TOP3原因:
1)\.ssh目录/authorized\_keys 权限不是700/600
2)公钥粘贴换行、空格、格式错乱
3)SELinux拦截、用户不对应
### 3\. rsync: command not found
原因:B服务器未安装rsync
解决:`yum install \-y rsync`
## 六、关键总结
1\. 免密核心:**哪个用户登录,密钥就配哪个用户的家目录**
2\. 权限铁律:**\.ssh=700 、authorized\_keys=600**
3\. 验证标准:ssh无密码登录 \+ rsync正常传输 双验证才算完成
浙公网安备 33010602011771号