Linux中ssh远程登录原理与配置

SSH连接的五个阶段

1. 版本协商阶段(Protocol Version Negotiation)
  • 目的:协商使用SSH-1或SSH-2协议(现代系统默认SSH-2)。

  • 流程:

  • 关键点:若版本不兼容(如客户端只支持SSH-1,服务端仅支持SSH-2),连接立即终止。


2. 算法协商阶段(Algorithm Negotiation)
  • 目的:协商加密算法、MAC(消息认证码)、密钥交换算法等。

  • 流程:

  • 算法类型:

    • 密钥交换算法 :curve25519-sha256, ecdh-sha2-nistp256
    • 加密算法 :aes256-gcm@openssh.com, chacha20-poly1305
    • MAC算法 :hmac-sha2-256
    • 主机密钥算法 :ssh-ed25519, ecdsa-sha2-nistp256

3. 认证阶段(Authentication)

客户端需通过服务端验证,常见方式:密码认证 、公钥认证。

🔐 密码认证原理
  • 风险 :易受暴力破解攻击,建议启用失败次数限制(如MaxAuthTries 3)。
🔑 密钥认证原理
  • 优势:抵御中间人攻击(依赖主机密钥)、无需传输密码。
  • 关键文件 :
    • 客户端:~/.ssh/id_ed25519(私钥), ~/.ssh/id_ed25519.pub(公钥)
    • 服务端:~/.ssh/authorized_keys(存储已授权的公钥)

4. 会话请求阶段(Session Request)
  • 目的:建立交互式Shell、SFTP、端口转发等通道。

  • 流程:

  • 关键请求类型:

    • shell:启动交互式终端
    • subsystem sftp:启动SFTP服务
    • tcpip-forward:请求端口转发

5. 数据交互阶段(Data Exchange)
  • 安全通道特性:

    • 所有数据通过对称加密传输(如AES-256)
    • 每个数据包附加MAC校验码防篡改
    • 支持压缩(可选)
  • 数据传输流程:


认证方式对比总结

特性 密码认证 密钥认证
安全性 较低(易受暴力破解) 高(非对称加密+签名)
便捷性 需手动输入密码 免密码(可配合ssh-agent)
防中间人攻击 依赖主机密钥验证 依赖主机密钥验证
配置文件 /etc/ssh/sshd_config ~/.ssh/authorized_keys
推荐场景 临时访问 自动化脚本/常连接

SSH完整使用指南

一、SSH服务端部署
复制代码
# 安装SSH服务
yum -y install openssh openssh-clients

# 启动服务并设置开机自启
systemctl restart sshd
systemctl enable sshd

# 更改用户登录选项
vim /etc/ssh/sshd_config
# 把选项更改为yes(Centos7有些为默认开启)
#PermitRootLogin yes
二、SSH连接基础
复制代码
# 基本连接(仅命令行)
ssh username@server_ip

# 带图形界面转发(X11 Forwarding)
ssh -X username@server_ip
三、密钥认证配置流程

具体命令:

复制代码
# 1. 客户端生成密钥(默认RSA算法)
ssh-keygen  # 连续回车使用默认设置

# 2. 上传公钥到服务器(需验证密码)
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip

# 3. 验证密钥登录(无需密码)
ssh username@server_ip
四、文件传输操作
操作类型 命令格式 示例
SFTP 交互式传输 sftp user@ip sftp root@172.25.0.183
→ 上传文件 put [本地文件] [远程路径] put /local/file /remote/
→ 下载文件 get [远程文件] [本地路径] get /remote/file /local/
SCP 直接传输
→ 上传文件 scp [本地文件] user@ip:[远程路径] scp /tmp/aa root@172.25.0.183:/var
→ 下载文件 scp user@ip:[远程文件] [本地路径] scp root@172.25.0.183:/tmp/cc /var

📌 路径记忆口诀:

  • 上传:本地文件 → 远程位置
  • 下载:远程文件 → 本地位置
五、SSH协议核心流程
六、安全增强配置
复制代码
# 禁用密码认证(强制密钥登录)
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

# 使用更安全的Ed25519算法
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@ip
七、常见问题排查
复制代码
# 查看详细连接过程(调试模式)
ssh -vvv user@ip

# 检查公钥权限(服务端)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# 验证端口监听
ss -tuln | grep :22

💡 最佳实践:

  1. 生产环境禁用密码认证
  2. 使用-J参数配置跳板机访问内网主机
  3. 定期轮换密钥(建议每90天)
  4. 使用Fail2Ban防御暴力破解

附:SSH协议栈架构

复制代码
应用层 (SCP/SFTP/SHELL)
     |
SSH连接协议 (通道管理)
     |
用户认证协议 (密钥/密码)
     |
传输层协议 (加密/压缩)
     |
   TCP/IP

使用-J参数配置跳板机访问内网主机

  1. 定期轮换密钥(建议每90天)
  2. 使用Fail2Ban防御暴力破解

附:SSH协议栈架构

复制代码
应用层 (SCP/SFTP/SHELL)
     |
SSH连接协议 (通道管理)
     |
用户认证协议 (密钥/密码)
     |
传输层协议 (加密/压缩)
     |
   TCP/IP
相关推荐
心随_风动12 分钟前
Ubuntu系统安装Apache服务教程
linux·ubuntu·apache
法的空间20 分钟前
AI 编程时代,为什么 Dart 分析会拖慢大型项目的开发
android·flutter·ios
晴天的雨.99229 分钟前
【Linux】make & Makefile 核心知识点
linux·运维·服务器
鱼儿也有烦恼33 分钟前
客户端应用架构模式
android·架构
Zevalin爱灰灰40 分钟前
Linux入门第一部分(Ubuntu入门篇) 第三章 shell脚本入门(一)
linux·ubuntu·嵌入式
丘山望岳42 分钟前
Linux基础指令入门篇
linux·运维·服务器
笨笨饿1 小时前
#143_屏幕画撕裂的问题及解决方法
linux·stm32·单片机·嵌入式硬件·mcu·lvgl·嵌入式实时数据库
小年糕是糕手1 小时前
【AI】用 Python 做一个 AI 截图检索助手:把收藏夹里的截图找回来
linux·人工智能·python·chatgpt·agent·codex·deepseek
hhhjhl1 小时前
Zod 跨端三方库仓颉适配全流程
linux·运维·ubuntu
独隅1 小时前
Claude 高效应用实战指南
android·java·开发语言·claude·claude code