远程安全连接:OpenSSH 客户端与服务器设置详解
OpenSSH 作为 Secure Shell (SSH) 协议的开源实现,是进行远程安全连接的基石。它通过强大的加密技术,确保了在不安全网络上的通信机密性和完整性,有效防御了窃听、连接劫持等威胁。本指南将详细介绍 OpenSSH 客户端和服务器的设置,并提供一系列安全最佳实践,助您构建稳固的远程访问机制。
OpenSSH 简介
SSH 协议允许用户在远程主机上执行命令、传输文件以及管理网络服务,所有数据传输都经过加密,从而保障了通信的安全性。OpenSSH 广泛应用于各种操作系统,是服务器管理和开发工作不可或缺的工具。
OpenSSH 服务器设置
OpenSSH 服务器组件 sshd 在指定端口持续监听客户端连接请求。
1. 安装 OpenSSH 服务器
Linux (Debian/Ubuntu)
bash
sudo apt update
sudo apt install openssh-server
Linux (CentOS/RHEL)
bash
sudo yum install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
Windows
从 Windows Server 2019 和 Windows 10 (版本 1809) 开始,OpenSSH 已作为可选功能集成。
通过 PowerShell 安装:
“`powershell
检查安装状态
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH*’
安装 OpenSSH 服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
启动 SSH 服务
Start-Service sshd
设置为自动启动
Set-Service -Name sshd -StartupType Automatic
“`
2. 配置 OpenSSH 服务器 (sshd_config)
服务器的核心配置文件是 /etc/ssh/sshd_config (Linux) 或 %programdata%\ssh\sshd_config (Windows)。在修改前,务必备份原文件。
重要配置项与安全建议:
-
修改默认端口 (Port)
将 SSH 默认端口 22 修改为其他不常用端口(例如 2222),可有效减少自动化扫描和攻击。
#Port 22
Port 2222
注意:修改端口后,请务必更新防火墙规则以允许新端口的流量。 -
禁用 root 用户登录 (PermitRootLogin)
禁止 root 用户直接通过 SSH 登录是重要的安全措施。建议使用普通用户登录后,通过sudo提升权限。
PermitRootLogin no -
启用密钥认证 (PubkeyAuthentication)
密钥认证比密码认证更为安全可靠。
PubkeyAuthentication yes -
禁用密码认证 (PasswordAuthentication)
在确认密钥认证已成功配置并测试通过后,强烈建议禁用密码认证,以防止暴力破解攻击。
PasswordAuthentication no
KbdInteractiveAuthentication no -
限制用户访问 (AllowUsers / AllowGroups)
遵循最小权限原则,限制只有特定用户或用户组才能通过 SSH 访问服务器。
AllowUsers user1 user2
# 或者
AllowGroups sshusers -
使用协议版本 2 (Protocol)
SSH 协议版本 1 存在安全漏洞,应始终使用更安全的版本 2。现代 OpenSSH 版本通常默认只支持版本 2。
Protocol 2
3. 生成 SSH 密钥对
SSH 密钥对由一个私钥(保存在客户端)和一个公钥(部署在服务器)组成。
在您的本地客户端机器上执行以下命令生成密钥对:
bash
ssh-keygen -t ed25519 -C "[email protected]"
* -t ed25519: 指定密钥类型为 Ed25519,这是一种推荐的算法,兼顾安全性和性能。您也可以使用 rsa -b 4096 生成 4096 位的 RSA 密钥。
* -C "[email protected]": 为密钥添加注释,便于识别。
命令执行后,会提示您选择保存密钥的路径(默认 ~/.ssh/id_ed25519)和设置一个密码短语 (passphrase)。为私钥设置密码短语可增加安全性。
这将在 ~/.ssh/ 目录下生成:
* id_ed25519 (私钥): 严禁泄露。
* id_ed25519.pub (公钥): 可安全分享。
4. 部署公钥到服务器
将客户端生成的公钥复制到服务器的 ~/.ssh/authorized_keys 文件中。
-
使用
ssh-copy-id(推荐):
bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip -p 2222
将user替换为服务器用户名,your_server_ip替换为服务器 IP 或域名,-p 2222替换为 SSH 端口。 -
手动复制:
- 在客户端查看公钥内容:
cat ~/.ssh/id_ed25519.pub - 通过 SSH 连接到服务器(如果尚未禁用密码认证,可先用密码登录)。
- 在服务器上创建
.ssh目录并设置正确权限:mkdir -p ~/.ssh && chmod 700 ~/.ssh - 将客户端的公钥内容追加到
~/.ssh/authorized_keys文件中,并设置权限:
bash
echo "your_public_key_content_here" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
- 在客户端查看公钥内容:
5. 重启 SSH 服务
修改 sshd_config 后,需重启 SSH 服务以使配置生效。
- Linux:
bash
sudo systemctl restart sshd
# 或者
sudo service ssh restart - Windows:
powershell
Restart-Service sshd
6. 配置防火墙
如果修改了 SSH 端口,请确保防火墙允许新端口的入站连接。
- UFW (Ubuntu):
sudo ufw allow 2222/tcp && sudo ufw reload - firewalld (CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --reload - Windows 防火墙: 手动添加入站规则,允许 TCP 端口 2222。
OpenSSH 客户端设置
1. 安装 OpenSSH 客户端
- Linux/macOS: 通常已预装。未安装可使用包管理器安装
openssh-client。 - Windows: 从 Windows 10 (版本 1809) 开始集成。
通过 PowerShell 安装:
powershell
# 检查安装状态
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*Client'
# 安装 OpenSSH 客户端
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
2. 连接到服务器
使用 ssh 命令连接到远程服务器:
bash
ssh user@your_server_ip -p 2222
* user: 远程服务器上的用户名。
* your_server_ip: 远程服务器的 IP 地址或域名。
* -p 2222: 如果服务器 SSH 端口不是 22,需通过 -p 参数指定。
首次连接时,客户端会提示确认服务器指纹。输入 yes 后,服务器信息将保存到 ~/.ssh/known_hosts 文件中。
3. 客户端配置文件 (~/.ssh/config)
客户端配置文件 ~/.ssh/config 允许您为不同的服务器定义别名和自定义连接参数,简化连接操作。
示例 ~/.ssh/config 文件:
Host myserver
Hostname your_server_ip_or_domain
User your_username
Port 2222
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
配置完成后,只需使用别名即可连接:ssh myserver
4. SSH 代理 (ssh-agent)
ssh-agent 在后台运行,用于存储私钥的解密版本。这样,您只需在会话开始时输入一次私钥的密码短语,之后即可无需重复输入密码短语进行多次连接。
- 启动
ssh-agent(通常自动启动)。 - 使用
ssh-add将私钥添加到代理中:ssh-add ~/.ssh/id_ed25519。如果私钥有密码短语,此时会提示输入。
安全最佳实践总结
- 使用密钥认证并禁用密码认证: 最关键的安全措施。
- 修改默认 SSH 端口: 增加服务器隐蔽性,减少自动化攻击。
- 禁用 root 用户直接登录: 始终使用普通用户登录,并通过
sudo执行管理任务。 - 为私钥设置强密码短语: 提供额外保护。
- 限制用户访问: 仅允许必要用户或用户组连接。
- 定期更新 OpenSSH: 确保客户端和服务器版本最新,获取安全补丁。
- 配置防火墙: 仅允许来自受信任 IP 的 SSH 连接,并开放配置的 SSH 端口。
- 监控 SSH 日志: 定期检查日志 (
/var/log/auth.log或/var/log/secure),可考虑使用fail2ban。 - 使用强加密算法: 确保 SSH 流量使用 AES 等强加密算法。
- 配置连接超时: 设置空闲会话超时,防止未经授权访问。
遵循这些指南,您将能够构建一个安全、高效的远程连接环境。