Skip to content

SSH 配置详解

SSH(Secure Shell)是用于远程登录和安全数据传输的协议。Ubuntu 默认使用 OpenSSH 服务器,以下是 SSH 的配置步骤、关键文件说明及安全优化建议。

1. 安装 OpenSSH 服务器

Ubuntu 默认可能未安装 SSH 服务器,需手动安装:

bash
sudo apt update
sudo apt install openssh-server
  • 安装后,SSH 服务会自动启动。
  • 验证服务状态:sudo systemctl status ssh(或 sshd)。
  • 启用开机自启:sudo systemctl enable ssh

2. SSH 配置文件

主配置文件位于 /etc/ssh/sshd_config。以下是关键配置项及其说明:

  • Port:默认端口是 22,可改为非标准端口(如 2222)以提高安全性。
    bash
    Port 2222
  • ListenAddress:指定监听的 IP 地址(如仅允许本地网络访问)。
    bash
    ListenAddress 192.168.1.100
  • PermitRootLogin:是否允许 root 用户登录,建议禁用。
    bash
    PermitRootLogin no
  • PasswordAuthentication:是否允许密码登录,建议禁用,改用密钥认证。
    bash
    PasswordAuthentication no
  • AllowUsers:指定允许登录的用户。
    bash
    AllowUsers user1 user2
  • MaxAuthTries:最大登录尝试次数,防止暴力破解。
    bash
    MaxAuthTries 3
  • PubkeyAuthentication:启用公钥认证。
    bash
    PubkeyAuthentication yes

3. 配置 SSH 密钥认证

密钥认证比密码登录更安全,步骤如下:

  1. 生成密钥对(在客户端机器上):
    bash
    ssh-keygen -t rsa -b 4096
    • 默认生成 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。
    • 可设置密码保护私钥。
  2. 将公钥复制到服务器
    bash
    ssh-copy-id user@server_ip
    • 或者手动将 id_rsa.pub 内容追加到服务器的 ~/.ssh/authorized_keys
  3. 禁用密码登录: 编辑 /etc/ssh/sshd_config,设置:
    bash
    PasswordAuthentication no
  4. 重启 SSH 服务
    bash
    sudo systemctl restart ssh

4. 安全加固建议

  • 更改默认端口:将 Port 改为非 22 端口(如 2222),减少扫描攻击。
  • 禁用 root 登录:设置 PermitRootLogin no
  • 限制用户访问:使用 AllowUsersAllowGroups
  • 使用 Fail2Ban 防止暴力破解
    bash
    sudo apt install fail2ban
    • 配置 /etc/fail2ban/jail.local,启用 SSH 防护:
      ini
      [sshd]
      enabled = true
      port = 2222  # 如果更改了默认端口
      maxretry = 3
      bantime = 3600
    • 重启 Fail2Ban:sudo systemctl restart fail2ban
  • 启用防火墙:使用 ufw 限制 SSH 访问:
    bash
    sudo ufw allow 2222/tcp
    sudo ufw enable
  • 定期更新系统:确保 OpenSSH 和系统补丁为最新版本:
    bash
    sudo apt update && sudo apt upgrade

5. 常用 SSH 客户端命令

  • 登录服务器:ssh user@server_ip -p 2222(指定端口)。
  • 传输文件:scp file user@server_ip:/path(复制文件到服务器)。
  • 调试连接:ssh -v user@server_ip(显示详细日志)。

6. 常见问题排查

  • 无法连接:检查服务是否运行(sudo systemctl status ssh)、端口是否开放(netstat -tuln)、防火墙规则。
  • 权限错误:确保 ~/.ssh 权限为 700,authorized_keys 为 600:
    bash
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  • 重启服务:每次修改 sshd_config 后,运行:
    bash
    sudo systemctl restart ssh