• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
记得承诺过
博客园    首页    新随笔    联系   管理    订阅  订阅

Linux 两台服务器 SSH 免密登录完整配置文档(含最终测试\+rsync免密)

服务器ssh免密
 
## 一、环境说明
 
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正常传输 双验证才算完成
posted @ 2026-05-13 11:53  记得承诺过  阅读(25)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3