远程安全连接:OpenSSH 客户端与服务器设置详解 – wiki基地

远程安全连接: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 端口。

  • 手动复制:

    1. 在客户端查看公钥内容:cat ~/.ssh/id_ed25519.pub
    2. 通过 SSH 连接到服务器(如果尚未禁用密码认证,可先用密码登录)。
    3. 在服务器上创建 .ssh 目录并设置正确权限:mkdir -p ~/.ssh && chmod 700 ~/.ssh
    4. 将客户端的公钥内容追加到 ~/.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。如果私钥有密码短语,此时会提示输入。

安全最佳实践总结

  1. 使用密钥认证并禁用密码认证: 最关键的安全措施。
  2. 修改默认 SSH 端口: 增加服务器隐蔽性,减少自动化攻击。
  3. 禁用 root 用户直接登录: 始终使用普通用户登录,并通过 sudo 执行管理任务。
  4. 为私钥设置强密码短语: 提供额外保护。
  5. 限制用户访问: 仅允许必要用户或用户组连接。
  6. 定期更新 OpenSSH: 确保客户端和服务器版本最新,获取安全补丁。
  7. 配置防火墙: 仅允许来自受信任 IP 的 SSH 连接,并开放配置的 SSH 端口。
  8. 监控 SSH 日志: 定期检查日志 (/var/log/auth.log/var/log/secure),可考虑使用 fail2ban
  9. 使用强加密算法: 确保 SSH 流量使用 AES 等强加密算法。
  10. 配置连接超时: 设置空闲会话超时,防止未经授权访问。

遵循这些指南,您将能够构建一个安全、高效的远程连接环境。

滚动至顶部