Skip to content

OpenSSH 配置与使用指南

1. 概述

OpenSSH 组件

  • openssh-clients:客户端工具 sshscpsftp(类似 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. 密钥认证流程

准备阶段

  1. 在客户端生成密钥对
bash
ssh-keygen -t dsa

生成的密钥对包括公钥 id_dsa.pub 和私钥 id_dsa

  1. 发送公钥到服务端
plain
ssh-copy-id -i .ssh/id_dsa.pub user@ip:~/.ssh

服务端将接收到的公钥存储在 .ssh 目录下,并设置文件权限为 600。

认证阶段

  1. 客户端发送连接请求。
  2. 服务端用接收到的公钥加密质询,并发送至客户端。
  3. 客户端使用私钥解锁质询,并将解密后的质询发送回服务端。
  4. 服务端验证质询,验证通过后,建立连接。

完成密钥认证

密钥认证完成后,客户端可以免密码登录。

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

感谢阅读,欢迎交流!