SSH 使用指南


一、SSH基本概念与作用

SSH(Secure Shell)是一种加密网络协议,用于在不安全网络中实现安全通信,主要功能包括远程登录、文件传输、端口转发等。其核心原理基于非对称加密和对称加密结合,确保数据传输机密性和完整性。

核心功能:

  1. 远程登录:通过加密通道执行命令行操作(如ssh user@host)。
  2. 文件传输:使用scpsftp安全传输文件。
  3. 端口转发:创建加密隧道,突破防火墙限制(本地/远程/动态转发)。
  4. X11转发:安全运行远程图形界面程序(ssh -X)。

版本差异

  • SSH1:早期版本,存在安全漏洞,已逐渐淘汰。
  • SSH2:改进加密算法,支持更安全的密钥交换(如Diffie-Hellman),推荐使用。

二、SSH安装与配置

1. 安装方法(各操作系统)
  • Linux

    • 大多数发行版预装OpenSSH。若无,使用包管理器安装:

      # Debian/Ubuntu
      sudo apt install openssh-client openssh-server
      # RHEL/CentOS
      sudo yum install openssh-clients openssh-server
      
    • 验证安装:ssh -V

  • macOS

    • 系统自带SSH客户端,升级可通过Homebrew:

      brew install openssh
      
    • 服务端默认禁用,需手动启用。

  • Windows

    • Windows 10/11:通过“设置”→“应用”→“可选功能”添加OpenSSH客户端。
    • 旧版本:使用第三方工具(如PuTTY、Git Bash)或安装OpenSSH for Windows。
2. 配置文件详解
  • 客户端配置~/.ssh/config(Linux/macOS)或C:\Users\用户\.ssh\config(Windows)。

    Host myserver
      HostName 192.168.1.100
      User admin
      Port 2222
      IdentityFile ~/.ssh/id_rsa
    
    • 常用参数HostName(目标IP)、User(用户名)、Port(端口)、IdentityFile(私钥路径)。
  • 服务端配置/etc/ssh/sshd_config

    • 关键参数
  • Port 2222:修改默认端口。

  • PermitRootLogin no:禁止root登录。

  • PasswordAuthentication no:禁用密码认证(强制密钥登录)。

  • AllowUsers user1 user2:限制可登录用户。

    • 权限要求:配置文件需严格权限(如chmod 600 ~/.ssh/*)。

三、SSH常用命令与操作

1. 基础命令
  • 连接远程主机

    ssh user@hostname -p 2222  # 指定端口
    ssh -i ~/.ssh/custom_key user@host  # 指定私钥
    
  • 执行远程命令

    ssh user@host "ls /var/log"  # 单次命令执行
    
2. 文件传输
  • SCP(Secure Copy):

    scp -P 2222 local_file user@host:/remote/path  # 上传
    scp user@host:/remote/file ./local_path  # 下载
    
  • SFTP(交互式传输):

    sftp user@host
    sftp> put local_file
    sftp> get remote_file
    
3. 密钥管理
  • 生成密钥对

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"  # RSA算法,4096位强度
    
    • 默认保存路径:~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥)。
  • 部署公钥到服务器

    ssh-copy-id -i ~/.ssh/id_rsa.pub user@host  # 自动追加到~/.ssh/authorized_keys
    
    • 权限要求:服务器端authorized_keys文件权限需为600.ssh目录权限为700

四、SSH隧道与端口转发

1. 本地端口转发(访问远程服务)
ssh -L 8080:localhost:80 user@jump_host  # 本地8080→跳板机→目标机80端口
  • 应用场景:访问内网Web服务。
2. 远程端口转发(暴露本地服务到公网)
ssh -R 2222:localhost:22 user@public_host  # 公网主机的2222→本地SSH
  • 应用场景:从外部访问内网主机。
3. 动态端口转发(SOCKS代理)
ssh -D 1080 user@proxy_host  # 本地1080端口作为SOCKS代理
  • 应用场景:浏览器通过代理访问受限资源。

五、SSH安全加固

1. 基础防护
  • 修改默认端口:减少自动化扫描攻击(Port 2222)。

  • 禁用密码登录:仅允许密钥认证(PasswordAuthentication no)。

  • 限制用户和IP

    AllowUsers user1 user2
    AllowGroups ssh_users
    
    • 结合防火墙(如iptablesufw)限制SSH端口访问。
2. 高级措施
  • Fail2ban:自动屏蔽暴力破解IP。

    # 安装与配置
    sudo apt install fail2ban
    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
    • 修改jail.local中的[sshd]部分,设置maxretrybantime
  • 多因素认证(MFA) :结合TOTP工具(如Google Authenticator)增强安全性。


六、常见错误排查

1. 连接失败
  • 检查网络连通性

    ping host  # 确认主机可达
    telnet host 22  # 检查端口开放(Windows)
    nc -zv host 22  # Linux/macOS
    
  • 服务状态与日志

    systemctl status sshd  # 检查服务运行状态
    journalctl -u sshd | tail -n 50  # 查看最新日志
    
2. 密钥认证问题
  • 权限错误

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
  • 密钥格式:确保公钥格式正确(以ssh-rsa AAAAB3...开头)。


七、扩展工具与资源

  • 客户端工具
    • PuTTY(Windows):图形化SSH客户端。
    • MobaXterm:集成SSH、SFTP和X11转发。
  • 自动化管理
    • Ansible:基于SSH的配置管理工具。
    • SSH Agent Forwarding:转发本地密钥到跳板机,简化多级登录。