云计算百科
云计算领域专业知识百科平台

CentOS服务器SSH远程连接全指南

💻CentOS 服务器 SSH 远程连接全攻略|从安装到安全配置保姆级教程

作为运维新手第一次接触 CentOS 服务器时,被 SSH 配置搞得焦头烂额!整理了从安装到高级安全设置的全流程,附超详细命令和避坑指南,手把手教你搞定远程连接👇

📌 基础概念扫盲

SSH(Secure Shell):Linux 服务器最常用的远程管理协议,通过加密传输防止数据窃听。它采用非对称加密技术,在客户端和服务器之间建立安全通道,可以有效防止中间人攻击。SSH 协议由芬兰学者 Tatu Ylönen 于 1995 年设计,是目前最安全的远程登录方式之一。

默认端口:22(建议修改为非默认端口提高安全性)。常见的替代端口有:2222、3333、4444 等,但避免使用常见服务端口(如 80、443)。端口号范围应在 1024-49151 之间,低于 1024 的端口通常为系统保留端口。

两种认证方式: ✅ 密码认证(适合新手):简单易用,但安全性较低,容易受到暴力破解攻击 ✅ 密钥认证(更安全,推荐生产环境):采用非对称加密,安全性高,避免了密码泄露风险

一、安装与启动 SSH 服务

1. 检查是否已安装

# 查看SSH服务状态
systemctl status sshd
# 若显示"active (running)"则已安装,否则执行安装命令
# 也可通过以下命令检查安装包
rpm -qa | grep openssh-server

2. 安装 OpenSSH 服务(CentOS 7/8 通用)

# CentOS 7/8安装命令相同
yum install openssh-server openssh-clients -y
# 安装完成后,可通过以下命令查看版本
ssh -V

安装完成后,系统会自动创建以下重要文件:

  • 服务端程序:/usr/sbin/sshd
  • 客户端程序:/usr/bin/ssh
  • 配置文件:/etc/ssh/sshd_config(服务器配置)
  • 客户端配置文件:/etc/ssh/ssh_config(可选配置)
  • 密钥文件存储目录:/etc/ssh/ssh_host_*_key

3. 启动并设置开机自启

# 启动SSH服务
systemctl start sshd
# 设置开机自启动
systemctl enable sshd
# 验证服务状态
systemctl is-enabled sshd

二、远程连接实战(Windows/Mac 通用)

▶ Windows 用户(推荐 PuTTY 工具)

  • 从官网 Download PuTTY – a free SSH and telnet client for Windows 下载 PuTTY
  • 运行 PuTTY,在"Host Name (or IP address)"输入服务器 IP
  • 在"Port"输入 SSH 端口(默认 22)
  • 点击"Open"按钮连接
  • 首次连接会弹出安全警告窗口("The server's host key is not cached"),点击"是"保存服务器指纹
  • 在终端窗口输入用户名和密码完成登录
  • 可选:保存会话配置方便下次连接
  • ▶ Mac/Linux 用户(自带终端)

    # 基本连接格式:ssh 用户名@服务器IP -p 端口(默认22可省略)
    ssh admin@192.168.1.100

    # 连接端口为2222的服务器
    ssh user@server.com -p 2222

    # 使用特定私钥连接
    ssh -i ~/.ssh/custom_key.pem user@server.com

    # 详细输出模式(调试用)
    ssh -v user@server.com

    三、核心配置文件修改(重点!)

    1. 进入配置文件目录

    cd /etc/ssh/
    # 先备份原配置文件(防止改崩)
    cp sshd_config sshd_config.bak
    # 设置配置文件权限(仅root可写)
    chmod 600 sshd_config

    2. 常用安全配置修改(用 vi/vim 编辑)

    vim sshd_config

    推荐修改项(取消注释并修改):

    # 修改默认端口(避免被暴力破解)
    Port 2222

    # 禁止root用户直接登录(提高安全性)
    PermitRootLogin no

    # 启用密钥认证(更安全)
    PubkeyAuthentication yes

    # 禁止密码认证(配合密钥认证使用)
    PasswordAuthentication no

    # 限制可登录用户(多个用户用空格分隔)
    AllowUsers admin devops backup

    # 限制最大尝试次数(防暴力破解)
    MaxAuthTries 3

    # 设置空闲超时时间(单位秒)
    ClientAliveInterval 300
    ClientAliveCountMax 0

    # 禁用DNS反向解析(加快连接速度)
    UseDNS no

    # 限制协议版本(禁用不安全的SSHv1)
    Protocol 2

    # 限制同时会话数
    MaxSessions 5

    # 禁用X11转发(除非需要)
    X11Forwarding no

    3. 重启服务使配置生效

    # 检查配置语法是否正确
    sshd -t
    # 重启服务
    systemctl restart sshd
    # 查看服务状态
    systemctl status sshd

    四、密钥认证配置(生产环境必学)

    1. 本地生成密钥对(Mac/Linux 终端)

    # 生成RSA密钥对(推荐4096位)
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    # 或者生成更安全的Ed25519密钥
    ssh-keygen -t ed25519 -a 100

    # 生成过程中会提示:
    # 密钥保存路径(默认~/.ssh/id_rsa)
    # 设置密钥密码(可选但推荐)
    # 确认密钥密码

    # 生成后会在~/.ssh目录下产生:
    # id_rsa(私钥,必须保密)
    # id_rsa.pub(公钥,可公开)
    # 若指定了其他名称,如custom_key,则生成custom_key和custom_key.pub

    # 设置私钥权限
    chmod 600 ~/.ssh/id_rsa

    2. 上传公钥到服务器

    # 方法一:使用ssh-copy-id自动上传
    # 格式:ssh-copy-id -p 端口 用户名@服务器IP
    ssh-copy-id -p 2222 admin@192.168.1.100
    # 输入密码后自动将公钥添加到服务器~/.ssh/authorized_keys

    # 方法二:手动上传(当ssh-copy-id不可用时)
    # 1. 将公钥内容复制到剪贴板
    cat ~/.ssh/id_rsa.pub | pbcopy # Mac
    cat ~/.ssh/id_rsa.pub | xclip -selection clipboard # Linux

    # 2. 登录服务器,编辑authorized_keys文件
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    touch ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    vim ~/.ssh/authorized_keys
    # 粘贴公钥内容并保存

    3. 无密码登录测试

    ssh admin@192.168.1.100 -p 2222
    # 若设置了密钥密码,则需要输入密钥密码
    # 无需输入服务器用户密码即配置成功

    五、常见问题解决方案

    ⚠️ 连接被拒绝

    # 1. 检查服务器SSH服务是否启动
    systemctl status sshd

    # 2. 检查防火墙是否放行端口
    firewall-cmd –list-all
    # 或者
    iptables -L -n

    # 放行端口示例(以2222为例)
    firewall-cmd –permanent –add-port=2222/tcp
    firewall-cmd –reload

    # 3. 检查SELinux是否阻止SSH
    sestatus
    # 临时关闭SELinux(测试用)
    setenforce 0
    # 永久关闭(不推荐生产环境)
    vim /etc/selinux/config
    # 修改SELINUX=disabled

    # 4. 检查网络连通性
    ping 192.168.1.100
    traceroute 192.168.1.100
    telnet 192.168.1.100 2222

    # 5. 检查端口是否监听
    netstat -tulnp | grep ssh
    ss -tulnp | grep ssh

    ⚠️ 密码登录失败

    # 1. 检查sshd_config配置
    grep PasswordAuthentication /etc/ssh/sshd_config

    # 2. 检查用户密码是否正确
    passwd admin

    # 3. 检查PAM模块限制
    vim /etc/pam.d/sshd

    # 4. 检查用户shell是否被禁用
    vim /etc/passwd
    # 确保用户shell为/bin/bash或/bin/sh

    # 5. 检查用户是否被锁定
    passwd -S admin

    # 6. 查看详细日志
    journalctl -xe
    tail -f /var/log/secure

    六、进阶安全设置(运维必看)

    限制 IP 访问(通过防火墙只允许特定 IP 连接)

    # 使用firewalld限制IP访问
    firewall-cmd –permanent –add-rich-rule="rule family='ipv4' source address='192.168.1.10' port protocol='tcp' port='2222' accept"
    firewall-cmd –permanent –add-rich-rule="rule family='ipv4' source address='10.0.0.0/24' port protocol='tcp' port='2222' accept"
    firewall-cmd –permanent –remove-service=ssh
    firewall-cmd –reload

    # 或者使用iptables
    iptables -A INPUT -p tcp –dport 2222 -s 192.168.1.10 -j ACCEPT
    iptables -A INPUT -p tcp –dport 2222 -j DROP
    service iptables save

    启用 TCP Wrappers(更精细的访问控制)

    # 在/etc/hosts.allow添加允许的IP
    echo "sshd: 192.168.1.0/24" >> /etc/hosts.allow
    echo "sshd: 10.0.0.5" >> /etc/hosts.allow

    # 在/etc/hosts.deny添加拒绝的IP
    echo "sshd: ALL" >> /etc/hosts.deny

    # 检查配置是否生效
    tcpdchk

    设置登录失败锁定(防暴力破解)

    # 安装fail2ban
    yum install epel-release -y
    yum install fail2ban -y
    systemctl start fail2ban
    systemctl enable fail2ban

    # 配置fail2ban
    vim /etc/fail2ban/jail.local

    添加以下内容:

    [sshd]
    enabled = true
    port = 2222
    filter = sshd
    logpath = /var/log/secure
    maxretry = 3
    findtime = 300
    bantime = 3600
    ignoreip = 127.0.0.1 192.168.1.0/24

    重启服务:

    systemctl restart fail2ban
    # 查看被ban的IP
    fail2ban-client status sshd

    💡 新手避坑指南

  • 配置前先备份:

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

  • 生产环境安全规范:

    • 严禁使用 root + 密码登录
    • 密钥认证 + 普通用户 sudo 是标配
    • 定期更新 SSH 软件版本:yum update openssh-server
    • 禁用不安全的加密算法(在sshd_config中添加) Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
      MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com

  • 端口修改注意事项:

    • 先确认新端口能连接,再关闭旧端口
    • 修改后立即测试:ssh -p 新端口 用户名@IP
    • 确保防火墙和SELinux允许新端口
  • 密钥管理:

    • 私钥必须设置600权限:chmod 600 ~/.ssh/id_rsa
    • 定期轮换密钥对(建议每3-6个月)
    • 使用密钥密码增加安全性
    • 备份密钥对到安全位置
  • 其他建议:

    • 启用双因素认证(如Google Authenticator)
    • 定期检查登录日志:last 和 lastb
    • 配置SSH会话超时:TMOUT=300(添加到/etc/profile)
  • 📚 实用命令速查表

    操作场景命令示例
    查看 SSH 状态 systemctl status sshd
    重启 SSH 服务 systemctl restart sshd
    查看 SSH 日志 tail -f /var/log/secure 或 journalctl -u sshd
    生成密钥对 ssh-keygen -t rsa -b 4096
    上传公钥 ssh-copy-id -p 2222 user@server
    测试密钥登录 ssh -p 2222 -i ~/.ssh/id_rsa user@server
    查看当前登录用户 who 或 w
    查看登录历史 last 和 lastb
    查看SSH连接 `netstat -tnpa
    检查SSH配置 sshd -t
    查看SSH版本 ssh -V
    强制断开SSH会话 pkill -9 -t pts/0

    掌握这些技能后,再也不用怕服务器远程管理啦!记得收藏这篇教程,配置时遇到问题可以随时对照~ 你们在配置 SSH 时遇到过哪些奇葩问题?评论区一起交流呀~

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » CentOS服务器SSH远程连接全指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!