Linux SSH 远程连接全攻略:从加密原理到实战配置(含图解)

一、SSH 加密体系核心理论

(一)对称加密与非对称加密对比解析

1. 加密算法分类与应用场景
类型 代表算法 密钥数量 加密速度 安全性特点 典型用途
对称加密 AES、3DES 1 个 ★★★★☆ 密钥传输风险高 会话数据加密
非对称加密 RSA、ECC 2 个 ★★☆☆☆ 公钥可公开,私钥需保密 身份认证、密钥交换
2. 对称加密的核心缺陷与解决方案
  • 密钥传输风险:攻击者可能拦截对称密钥(如通过 ARP 欺骗)。
  • SSH 解决方案:通过非对称加密(RSA/ECC)协商对称密钥,仅在首次连接时传输公钥。
3. 非对称加密的中间人攻击风险
  • 攻击原理
  1. 客户端请求连接服务器,攻击者拦截并发送自己的公钥。
  2. 客户端使用攻击者公钥加密密码,攻击者解密获取敏感信息。
  • 防御措施

    • 首次连接时校验服务端公钥指纹(通过ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub获取)。
    • 使用ssh-keyscan自动获取可信公钥并存入~/.ssh/known_hosts

(二)D-H 密钥交换协议深度解析

1. 协议工作流程
  1. 客户端与服务端各自生成随机数(a, b)和公开参数(g, p)。
  2. 双方交换公开参数,计算共享密钥(K = g^(a*b) mod p)。
  3. 最终通过共享密钥生成对称加密会话密钥。
2. 在 SSH 中的应用
  • 作用:在不安全信道中安全协商对称加密密钥,避免密钥明文传输。
  • 算法强度 :SSH 默认使用diffie-hellman-group14-sha1,建议升级至diffie-hellman-group16-sha512提升安全性。

二、SSH 认证机制与工作流程

(一)认证阶段详解

  1. 基于口令的认证流程
2. 基于密钥的认证流程(无密码登录)
  1. 客户端生成密钥对

    复制代码
    ssh-keygen -t rsa -b 4096 -C "[email protected]"
    # 生成路径:~/.ssh/id_rsa(私钥)、~/.ssh/id_rsa.pub(公钥)
  2. 部署公钥到服务端

    复制代码
    ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    # 自动将公钥追加到服务端~/.ssh/authorized_keys
  3. 认证交互流程

  • 服务端生成随机数 R,用客户端公钥加密后发送。
  • 客户端用私钥解密得到 R,结合会话密钥生成摘要回传。
  • 服务端比对摘要,一致则认证通过。

(二)配置文件核心参数解析

配置文件 作用描述 关键参数示例
/etc/ssh/sshd_config 服务端主配置文件 Port 2222 PermitRootLogin no
~/.ssh/authorized_keys 服务端公钥存储文件 ssh-rsa AAAAB3NzaC1y... user@client
~/.ssh/known_hosts 客户端可信服务端公钥存储文件 192.168.1.100 ssh-rsa AAAAB3NzaC1y...

三、实战实验:SSH 安全配置与密钥登录

(一)实验 1:修改 SSH 服务端口

操作步骤:
  1. 编辑配置文件

    复制代码
    vim /etc/ssh/sshd_config
    # 找到Port字段,修改为非默认端口(如2222)
    Port 2222
  2. 关闭防火墙(测试环境)

    复制代码
    systemctl stop firewalld && systemctl disable firewalld
  3. 临时关闭 SELinux(生产环境需配置策略)

    复制代码
    setenforce 0  # 临时关闭
    echo "SELINUX=permissive" > /etc/selinux/config  # 永久生效(需重启)
  4. 重启服务

    复制代码
    systemctl restart sshd
  5. 验证连接

    复制代码
    ssh -p 2222 [email protected]

(二)实验 2:拒绝 root 用户远程登录

操作步骤:
  1. 配置禁止 root 登录

    复制代码
    vim /etc/ssh/sshd_config
    PermitRootLogin no  # 将yes改为no
  2. 创建普通用户并授权

    复制代码
    useradd admin  # 创建用户
    echo "admin@123" | passwd --stdin admin  # 设置密码
    usermod -aG wheel admin  # 赋予sudo权限
  3. 切换登录方式

    复制代码
    ssh [email protected]  # 使用普通用户登录
    sudo su -  # 切换至root

(三)实验 3:允许特定用户登录

操作步骤:
  1. 配置允许用户列表

    复制代码
    vim /etc/ssh/sshd_config
    AllowUsers devops sysadmin  # 允许devops和sysadmin用户登录
    DenyUsers *  # 禁止其他所有用户(需放在AllowUsers之后)
  2. 创建用户并测试

    复制代码
    useradd devops && useradd sysadmin  # 创建用户
    ssh [email protected]  # 成功登录
    ssh [email protected]  # 拒绝登录

(四)实验 4:密钥登录 root 用户(生产环境不推荐)

客户端操作:
  1. 生成 4096 位 RSA 密钥对

    复制代码
    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_root
    # 生成独立密钥对,避免与普通用户混用
  2. 复制公钥到服务端

    复制代码
    ssh-copy-id -i ~/.ssh/id_rsa_root.pub [email protected]
服务端验证:
复制代码
ls -al ~/.ssh/authorized_keys  # 确认公钥已写入
ssh -i ~/.ssh/id_rsa_root [email protected]  # 无需密码登录

四、安全加固与最佳实践

(一)生产环境安全配置清单

加固项 配置方法 安全收益
禁止 root 登录 PermitRootLogin no 降低暴力破解风险
限制登录端口 Port 2222 隐藏默认端口,减少扫描暴露
启用公钥认证 PubkeyAuthentication yes 避免密码泄露
限制认证次数 MaxAuthTries 3 防止暴力破解重试
定期更新公钥 定期轮换 authorized_keys 内容 应对公钥泄露事件

(二)故障排查指南

1. 连接被拒绝
  • 可能原因

    • 端口未放行(firewall-cmd --list-ports检查)。
    • SSH 服务未启动(systemctl status sshd检查)。
  • 解决方法

    复制代码
    firewall-cmd --permanent --add-port=2222/tcp
    systemctl start sshd
2. 公钥认证失败
  • 可能原因

    • 公钥未正确部署(权限错误:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys)。
    • 服务端配置禁用公钥认证(PubkeyAuthentication no)。
  • 解决方法

    复制代码
    ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
    vim /etc/ssh/sshd_config && set PubkeyAuthentication yes

五、总结与扩展

通过本文的理论解析与实战操作,可全面掌握 SSH 的安全配置与认证机制,构建可靠的远程管理通道。在生产环境中,建议结合企业安全策略,定期进行渗透测试与配置审计,确保系统免受中间人攻击与暴力破解威胁。

相关推荐
盛满暮色 风止何安3 小时前
IS-IS 中间系统到中间系统
服务器·网络·网络协议·安全·web安全·网络安全·智能路由器
斯普信专业组3 小时前
Apidog MCP服务器,连接API规范和AI编码助手的桥梁
运维·服务器·人工智能
wayuncn3 小时前
深度解析物理机服务器故障修复时间:影响因素与优化策略
运维·服务器·物理机·服务器租用·服务器托管·物理服务器·哈尔滨idc
人间不清醒ab4 小时前
Ubuntu ping网络没有问题,但是浏览器无法访问到网络
linux·运维·ubuntu
babytiger4 小时前
为 Windows 和 Ubuntu 中设定代理服务器的详细方法
linux·windows·ubuntu
默心4 小时前
centos把jar包配置成服务并设置开机自启
linux·centos·jar
秦jh_4 小时前
【Linux网络】传输层协议UDP
linux·运维·服务器·网络·udp
weixin138233951794 小时前
网络安全EN18031-1,EN18031-2,EN18031-3三个标准对应的测试项目
网络·安全·web安全
饼干ovo5 小时前
Linux下软件安装实战
linux·运维·服务器