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
相关推荐
Yan-英杰几秒前
从零玩转搜索引擎 API: 多引擎整合实战
服务器·前端·microsoft
枕星而眠8 分钟前
C++ 面向对象核心机制深度解析:多态性、虚函数、虚继承与 final 类
运维·开发语言·c++·后端
着迷不白15 分钟前
八、shell脚本
linux·运维
tobias.b16 分钟前
JumpServer4\.10\.16离线部署\+外部Nginx反向代理 解决30分钟空闲断开WebSocket超时(延长10天)
运维·websocket·nginx
_李小白26 分钟前
【android opencv学习笔记】Day 31:提取轮廓之Canny算法
android·opencv·学习
零陵上将军_xdr34 分钟前
后端转全栈学习-Day6-JavaScript 基础-4
前端·javascript·学习
爱装代码的小瓶子35 分钟前
3. 设计buffer模块
linux·服务器·开发语言·c++·php
数智工坊38 分钟前
周志华《Machine Learning》学习笔记--第十四章--概率图模型
笔记·学习·机器学习
流浪00139 分钟前
Linux系统篇(四):一文吃透 Linux 虚拟地址空间:从页表映射到内核结构体全链路拆解
linux·运维·服务器
Jacob程序员40 分钟前
WebSSH技术实现全解析
linux·运维·服务器·websocket