SSH(Secure Shell)是 Linux 系统中广泛使用的远程连接和管理工具,它以安全性高、操作灵活著称。

一、SSH 的核心作用

  1. 加密通信
    所有传输数据(包括密码)均通过加密通道传输,避免被中间人窃听,相比 Telnet、FTP 等明文协议更安全。

  2. 远程登录与命令执行
    通过 ssh user@hostname 登录远程服务器,或直接执行单条命令(如 ssh user@host "ls /tmp")。

  3. 文件传输
    配合 scpsftp 实现加密的文件传输:

    1
    2
    
    scp file.txt user@remote:/path/to/dest  # 上传文件
    scp user@remote:/path/file.txt ./      # 下载文件
    

二、安装与基础配置

  1. 安装 SSH
    大多数 Linux 发行版默认安装 OpenSSH 服务端(sshd)和客户端(ssh)。若无,可通过包管理器安装:

    1
    2
    
    sudo apt install openssh-server  # Debian/Ubuntu
    sudo yum install openssh-server  # CentOS/RHEL
    
  2. 启动与检查服务

    1
    2
    3
    
    sudo systemctl start sshd    # 启动服务
    sudo systemctl enable sshd   # 设置开机自启
    sudo systemctl status sshd   # 检查运行状态
    
  3. 默认配置路径

    • 服务端配置:/etc/ssh/sshd_config
    • 客户端配置:/etc/ssh/ssh_config 或用户目录的 ~/.ssh/config

三、安全加固建议

  1. 禁用密码登录,使用密钥认证

    1
    2
    3
    4
    
    # 生成密钥对(默认保存到 ~/.ssh/id_rsa)
    ssh-keygen -t rsa -b 4096
    # 将公钥上传到远程服务器
    ssh-copy-id user@remote_host
    

    config 中修改:

    1
    2
    3
    4
    5
    6
    7
    
    Host xxxxx          # 自定义别名(如:prod、dev等)
        HostName xxxxxxxxxx  # 远程主机IP或域名
        User xxxxx          # 远程用户名
        Port 22                # SSH端口(默认22可省略)
        IdentityFile ~/.ssh/xxxxxx  # 指定私钥
        ServerAliveInterval 120
        PubKeyAcceptedKeyTypes +ssh-rsa
    

    config 中修改:

    1
    2
    
    PasswordAuthentication no      # 禁用密码登录
    PubkeyAuthentication yes       # 启用密钥认证
    
  2. 修改默认端口(22)​

    1
    
    Port 2222  # 避免自动化攻击
    

    需同步更新防火墙规则:

    1
    
    sudo ufw allow 2222/tcp
    
  3. 限制 root 登录

    1
    
    PermitRootLogin no
    
  4. 启用 Fail2Ban
    自动封禁多次登录失败的 IP,防止暴力破解。


四、高级功能

  1. 端口转发(隧道)​

    • 本地端口转发​(访问远程内网服务):

      1
      
      ssh -L 本地端口:目标地址:目标端口 user@remote_host
      
    • 远程端口转发​(暴露本地服务到公网):

      1
      
      ssh -R 远程端口:本地地址:本地端口 user@remote_host
      
  2. 代理跳板(Jump Host)​
    通过中转服务器连接内网主机:

    1
    
    ssh -J user@jump_host user@internal_host
    
  3. 长连接保持
    ~/.ssh/config 中配置避免连接超时:

    1
    2
    3
    
    Host *
       ServerAliveInterval 60
       ServerAliveCountMax 3
    

五、常见问题排查

  1. 连接被拒绝(Connection Refused)​

    • 检查 sshd 服务是否运行:systemctl status sshd
    • 确认端口是否开放:sudo ss -tulnp | grep sshd
  2. 认证失败(Permission Denied)​

    • 确认公钥已正确上传到 ~/.ssh/authorized_keys
    • 检查文件权限:chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
  3. 连接超时

    • 检查防火墙或安全组是否放行 SSH 端口
    • 使用 -v 参数查看详细日志:ssh -v user@host

六、替代工具

  • Mosh:基于 UDP,适合网络不稳定的环境(如移动设备)。
  • Telnet:明文协议,仅建议用于测试环境。
  • Web 控制台:如云服务商提供的网页终端(AWS EC2、阿里云等)。

通过合理配置,SSH 可以成为既安全又高效的远程管理工具。建议定期更新 OpenSSH 版本以修复潜在漏洞,并遵循最小权限原则分配用户访问权限。