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

发布于:2025-07-01 ⋅ 阅读:(29) ⋅ 点赞:(0)

💻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 工具)

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

▶ 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

💡 新手避坑指南

  1. 配置前先备份

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

  2. 生产环境安全规范

    • 严禁使用 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
      

  3. 端口修改注意事项

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

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

    • 启用双因素认证(如Google Authenticator)
    • 定期检查登录日志:lastlastb
    • 配置SSH会话超时:TMOUT=300(添加到/etc/profile)

📚 实用命令速查表

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

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


网站公告

今日签到

点亮在社区的每一天
去签到