linux配置ssh

第一阶段:安装与启动 SSH 服务

大多数 Linux 发行版默认已安装 OpenSSH 客户端,但服务器端可能需要手动安装。

  1. 安装软件包

    根据你的发行版使用对应的包管理器:

    发行版 命令
    Ubuntu / Debian sudo apt update && sudo apt install openssh-server
    CentOS / RHEL sudo yum install openssh-serversudo dnf install openssh-server
    Fedora sudo dnf install openssh-server
  2. 启动并启用服务

    安装完成后,需要启动服务并设置开机自启:

    bash 复制代码
    # 启动 SSH 服务
    sudo systemctl start ssh    # Debian/Ubuntu (部分旧版用 sshd)
    sudo systemctl start sshd   # CentOS/RHEL
    
    # 设置开机自启
    sudo systemctl enable ssh
    sudo systemctl enable sshd
    
    # 检查状态 (看到 active (running) 即成功)
    sudo systemctl status ssh

第二阶段:基础配置

SSH 服务的核心配置文件位于 /etc/ssh/sshd_config。修改此文件前,强烈建议先备份

bash 复制代码
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

使用编辑器(如 nanovim)打开配置文件:

bash 复制代码
sudo nano /etc/ssh/sshd_config

常用配置项修改:

  1. 修改默认端口 :将 #Port 22 修改为其他端口(如 Port 2222),可以大幅减少针对 22 端口的暴力破解尝试。
  2. 禁止 Root 登录 :为了安全,建议将 PermitRootLogin yes 改为 no,使用普通用户登录后再切换身份。
  3. 监听地址 :如有必要,可通过 ListenAddress 限制 SSH 只在特定 IP 上监听。

修改完成后,必须重启服务使配置生效:

bash 复制代码
sudo systemctl restart ssh

第三阶段:配置 SSH 密钥认证(推荐)

使用密钥登录比密码更安全,且可以实现免密登录。

  1. 生成密钥对

    你的本地电脑(或作为客户端的服务器)上执行:

    bash 复制代码
    # 推荐使用 Ed25519 算法(更安全高效)
    ssh-keygen -t ed25519 -C "your_email@example.com"
    
    # 或使用兼容性更好的 RSA 算法
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • 按回车使用默认保存路径。
    • 设置密码(Passphrase)可以增加一层安全保障,如果希望完全免密,直接回车留空即可。
  2. 上传公钥到服务器

    生成密钥后,需要将公钥(.pub 文件内容)复制到服务器。
    方法 A(推荐,最简单):

    bash 复制代码
    ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip -p 2222

    方法 B(手动复制):

    将本地 ~/.ssh/id_rsa.pub 的内容复制,然后在服务器上执行:

    bash 复制代码
    # 确保 .ssh 目录存在且权限正确
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    
    # 将公钥内容追加到 authorized_keys
    echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

第四阶段:安全加固(生产环境必做)

完成上述步骤后,建议进行以下安全设置:

  1. 禁用密码登录
    确认密钥登录测试无误后,编辑 /etc/ssh/sshd_config,将以下选项改为 no,强制使用密钥登录:

    bash 复制代码
    PasswordAuthentication no
    ChallengeResponseAuthentication no
  2. 配置防火墙
    开放你设置的 SSH 端口(例如 2222),并拒绝其他来源。

    • UFW (Ubuntu): sudo ufw allow 2222/tcp

    • Firewalld (CentOS):

      bash 复制代码
      sudo firewall-cmd --permanent --add-port=2222/tcp
      sudo firewall-cmd --reload
  3. 安装 Fail2ban
    这是一个防止暴力破解的工具,能自动封禁频繁尝试登录的 IP。

    bash 复制代码
    # Ubuntu/Debian
    sudo apt install fail2ban
    
    # CentOS/RHEL
    sudo yum install fail2ban

总结建议

  • 测试连接: 在关闭密码登录前,务必打开一个新的终端窗口测试连接,确保密钥能正常登录,避免把自己锁在服务器外面。
  • 保留备用会话: 在进行重大配置更改时,不要关闭当前的 SSH 会话,直到确认新配置生效且没有导致失联。
  • SELinux (仅限 CentOS/RHEL): 如果你修改了端口且系统开启了 SELinux,需要运行命令授权端口,否则连接会被拒绝:sudo semanage port -a -t ssh_port_t -p tcp 2222
相关推荐
2401_859049082 小时前
lvgl移植到Linux踩坑
linux·运维·arm开发·elasticsearch·嵌入式·ubantu
CheungChunChiu2 小时前
V4L2 框架下 `v4l2-ctl --list-frameintervals` 调用链解析
linux·ubuntu·sensor·cam
浅念-2 小时前
C语言——双向链表
c语言·数据结构·c++·笔记·学习·算法·链表
不学习何以强国2 小时前
宝塔Linux面板+进程守护管理器,部署.net8 core网站
linux·运维·服务器
cooldream20093 小时前
Vim 报错 E325:swap 文件冲突的原理、处理流程与彻底避免方案
linux·编辑器·vim
i建模3 小时前
在 Rocky Linux 上安装轻量级的 XFCE 桌面
linux·运维·服务器
lxl13073 小时前
学习C++(5)运算符重载+赋值运算符重载
学习
Data_Journal3 小时前
Scrapy vs. Crawlee —— 哪个更好?!
运维·人工智能·爬虫·媒体·社媒营销
若风的雨3 小时前
WC (Write-Combining) 内存类型优化原理
linux