Appearance
OpenSSH 配置与使用指南
1. 概述
OpenSSH 组件
- openssh-clients:客户端工具
ssh
、scp
、sftp
(类似 lrzsz) - openssh-server:服务端,配置文件为
/etc/ssh/sshd_config
2. 服务端核心配置
配置项 | 说明 |
---|---|
Port 22 | 修改默认端口以增强安全性(避免使用默认 22 端口)。 |
PermitRootLogin yes | 是否允许 root 远程登录(建议先创建普通用户并配置 sudo 权限)。 |
PasswordAuthentication yes | 是否启用密码认证(生产环境建议关闭,使用密钥认证)。 |
PubkeyAuthentication yes | 启用密钥认证(需取消注释)。 |
UseDNS no | 禁用 DNS 反向解析,加快连接速度。 |
GSSAPIAuthentication no | 禁用 GSSAPI 认证,提升连接速度。 |
3. Telnet vs OpenSSH
服务 | 特点 | 应用场景 |
---|---|---|
Telnet | 使用 23 端口,明文传输 | 作为 OpenSSH 备用方案,临时维护。 |
OpenSSH | 使用 22 端口,加密传输 | 默认远程管理工具,安全性高。 |
4. 密钥认证流程
准备阶段
- 在客户端生成密钥对:
bash
ssh-keygen -t dsa
生成的密钥对包括公钥 id_dsa.pub
和私钥 id_dsa
。
- 发送公钥到服务端:
plain
ssh-copy-id -i .ssh/id_dsa.pub user@ip:~/.ssh
服务端将接收到的公钥存储在 .ssh
目录下,并设置文件权限为 600。
认证阶段
- 客户端发送连接请求。
- 服务端用接收到的公钥加密质询,并发送至客户端。
- 客户端使用私钥解锁质询,并将解密后的质询发送回服务端。
- 服务端验证质询,验证通过后,建立连接。
完成密钥认证
密钥认证完成后,客户端可以免密码登录。
5. 创建和分发密钥
创建密钥对
plain
ssh-keygen -f ~/.ssh/id_rsa -P ''
-f
:指定密钥文件路径(默认生成id_rsa
私钥和id_rsa.pub
公钥)。-P ''
:设置空密码(生产环境建议设置强密码,此处为自动化批量管理简化操作)。
文件权限
.ssh
目录权限需为700
:
plain
chmod 700 ~/.ssh
- 私钥权限需为
600
:
plain
chmod 600 ~/.ssh/id_rsa
分发公钥
- 自动分发:
plain
sshpass -p [密码] ssh-copy-id -o StrictHostKeyChecking=no [用户]@[IP]
- 手动分发:
plain
ssh-copy-id -i ~/.ssh/id_rsa.pub user@目标IP
- 测试连接:
plain
ssh ip
6. 批量配置脚本
plain
#!/bin/bash
ips="7 8 31 41 9 10 51 5 6" # 示例 IP 列表
pass="Lidao996"
user=root
# 创建密钥对(若不存在)
key_file="$HOME/.ssh/id_rsa"
[ ! -f "$key_file" ] && ssh-keygen -t rsa -f "$key_file" -N ''
# 分发公钥
for ip in $ips; do
sshpass -p "$pass" ssh-copy-id -o StrictHostKeyChecking=no ${user}@10.0.0.$ip
done
# 验证连接
for ip in $ips; do
ssh -o StrictHostKeyChecking=no ${user}@10.0.0.$ip "hostname -I"
done
7. 升级 OpenSSH
plain
# 更新软件包列表
sudo apt update
# 安装编译 OpenSSH 所需的依赖
sudo apt install build-essential zlib1g-dev libssl-dev
# 安装 OpenSSH
sudo apt install zlib1g-dev
sudo apt install telnetd
sudo apt install libpam0g-dev libselinux1-dev
# 生成密钥对
ssh-keygen
# 查看 .ssh 目录权限
ll -d ~/.ssh # 权限应为 700
# 分发公钥
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@10.0.0.7
ssh-copy-id 10.0.0.31 # 简洁版
# 调试
ssh -v ip
1.1 创建秘钥对
plain
ssh-keygen -f ~/.ssh/id_rsa -P '' # 创建密钥对
脚本中添加判断,如果密钥对不存在则创建。
2. 分发公钥
plain
sshpass -p Lidao996 ssh-copy-id -o StrictHostKeyChecking=no root@10.0.0.8
8. 查询 OpenSSH 状态
plain
# 查询已安装的 OpenSSH 包
rpm -qa # 使用 RPM 包管理器
dpkg -l | grep openssh # 使用 DPkg 包管理器
# 启动 Telnet 服务
systemctl enable --now telnet.socket
# SSH 调试
ssh -v ip