温馨提示×

Linux Trigger:如何配置和使用SSH

小樊
41
2025-10-04 19:24:43
栏目: 智能运维

Linux下SSH的配置与使用指南

一、SSH概述

SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中为Linux/Unix系统提供安全的远程登录、文件传输(SCP/SFTP)和端口转发等功能。它通过加密技术防止数据窃取或篡改,是Linux系统管理的核心工具之一。

二、SSH安装

1. 安装SSH服务器(openssh-server)

要让Linux系统接受远程SSH连接,需安装openssh-server(客户端openssh-client通常默认安装):

  • Debian/Ubuntu
    sudo apt update && sudo apt install openssh-server
    
  • CentOS/RHEL/Fedora
    sudo yum install openssh-server    # CentOS/RHEL 7及以下
    sudo dnf install openssh-server    # CentOS/RHEL 8+/Fedora
    

2. 启动SSH服务并设置开机自启

安装完成后,启动SSH服务并配置为开机自动启动:

  • Debian/Ubuntu(服务名ssh):
    sudo systemctl start ssh      # 启动服务
    sudo systemctl enable ssh     # 开机自启
    
  • CentOS/RHEL/Fedora(服务名sshd):
    sudo systemctl start sshd     # 启动服务
    sudo systemctl enable sshd    # 开机自启
    

3. 验证服务状态

通过以下命令检查SSH服务是否运行:

sudo systemctl status ssh   # Debian/Ubuntu
sudo systemctl status sshd  # CentOS/RHEL/Fedora

若显示“active (running)”,则表示服务已正常启动。

三、SSH配置(服务器端)

SSH的主要配置文件为/etc/ssh/sshd_config,修改前建议备份:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

用文本编辑器(如nano)打开配置文件:

sudo nano /etc/ssh/sshd_config

常见安全配置项

  • 修改默认端口:将Port 22改为非标准端口(如2222),减少自动扫描攻击:
    Port 2222
    
  • 禁止root远程登录:避免root账户直接暴露,降低被爆破风险:
    PermitRootLogin no
    
  • 禁用密码登录:强制使用密钥认证,提升安全性(需提前配置密钥):
    PasswordAuthentication no
    PubkeyAuthentication yes
    
  • 限制允许登录的用户:仅允许指定用户(如user1user2)登录:
    AllowUsers user1 user2
    
  • 更改监听地址:若服务器有多个IP,可限制SSH仅监听特定IP(如192.168.1.100):
    ListenAddress 192.168.1.100
    

应用配置变更

修改配置文件后,重启SSH服务使变更生效:

  • Debian/Ubuntu
    sudo systemctl restart ssh
    
  • CentOS/RHEL/Fedora
    sudo systemctl restart sshd
    

防火墙配置

若系统启用了防火墙(如ufw/firewalld),需开放SSH端口:

  • UFW(Ubuntu/Debian)
    sudo ufw allow 2222/tcp    # 若修改了端口
    sudo ufw enable            # 启用防火墙
    
  • Firewalld(CentOS/RHEL)
    sudo firewall-cmd --permanent --add-port=2222/tcp  # 若修改了端口
    sudo firewall-cmd --reload
    

SELinux配置(仅CentOS/RHEL)

若修改了SSH端口,需更新SELinux策略:

sudo yum install policycoreutils-python-utils  # 安装工具
sudo semanage port -a -t ssh_port_t -p tcp 2222 # 添加端口到SELinux
sudo restorecon -Rv /etc/ssh                   # 恢复SSH目录上下文

四、SSH使用

1. 远程登录

通过SSH客户端连接远程服务器,基本语法:

ssh username@remote_host
  • 参数说明
    • username:远程服务器上的用户名(如rootuser1);
    • remote_host:远程服务器的IP地址或域名(如192.168.1.100example.com)。
  • 示例
    ssh user1@192.168.1.100       # 使用默认端口(22)
    ssh -p 2222 user1@192.168.1.100  # 指定端口(如2222)
    
  • 首次连接:首次连接时会提示确认服务器指纹,输入yes即可(避免中间人攻击)。
  • 退出登录:输入exit或按Ctrl+D退出远程会话。

2. 文件传输

SSH支持通过scp(安全复制)和sftp(安全FTP)传输文件:

  • SCP(命令行工具)
    • 上传文件到远程服务器:
      scp local_file user@remote_host:remote_path
      
      示例:将本地example.txt上传到远程/home/user目录:
      scp example.txt user1@192.168.1.100:/home/user
      
    • 从远程服务器下载文件:
      scp user@remote_host:remote_path local_path
      
      示例:从远程/home/user/example.txt下载到本地当前目录:
      scp user1@192.168.1.100:/home/user/example.txt .
      
  • SFTP(交互式工具)
    启动SFTP会话:
    sftp user@remote_host
    
    常用命令:
    • put local_file remote_path:上传文件;
    • get remote_file local_path:下载文件;
    • ls:列出远程目录文件;
    • exit:退出SFTP会话。

3. SSH密钥认证(无密码登录)

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

  • 生成密钥对(客户端操作):
    使用ssh-keygen生成RSA密钥对(默认保存在~/.ssh目录):
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    
    按提示操作(直接按回车键使用默认路径和空密码)。
  • 复制公钥到服务器
    使用ssh-copy-id将公钥(id_rsa.pub)复制到远程服务器的~/.ssh/authorized_keys文件中:
    ssh-copy-id user1@192.168.1.100
    
    输入远程用户密码后,公钥会自动追加到服务器的authorized_keys文件中。
  • 测试无密码登录
    再次连接远程服务器,无需输入密码即可登录:
    ssh user1@192.168.1.100
    
  • 手动复制公钥(可选)
    ssh-copy-id不可用,可手动复制公钥内容:
    cat ~/.ssh/id_rsa.pub | ssh user1@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
    
    确保服务器上~/.ssh目录权限为700authorized_keys文件权限为600
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    

五、常见问题排查

  • 无法连接:检查SSH服务是否启动(systemctl status ssh/sshd)、防火墙是否开放端口、服务器IP是否正确。
  • 权限问题:确保服务器上~/.ssh目录权限为700authorized_keys文件权限为600(权限过高会导致密钥认证失败)。
  • 配置错误:修改sshd_config后未重启服务,或配置项语法错误(如注释符号错误)。

0