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
相关推荐
旋风菠萝16 分钟前
设计模式---单例
android·java·开发语言
AI视觉网奇1 小时前
whisper tokenizer
linux·运维·服务器
whysqwhw2 小时前
Android Jetpack 中 ViewModel 的全面解析
android
NotStrandedYet2 小时前
信创国产Linux操作系统汇总:从桌面到服务器,百花齐放
linux·信创·国产化
特种加菲猫2 小时前
从文件到文件描述符:理解程序与文件的交互本质
linux·笔记
懋学的前端攻城狮3 小时前
深入浅出Linux-01:系统化掌握基础操作
linux·后端
孙克旭_3 小时前
day064-kodbox接入对象存储与配置负载均衡
linux·运维·阿里云·负载均衡
大锦终4 小时前
【Linux】环境变量
linux·运维·服务器
萑澈4 小时前
我在 Arch Linux Plasma 6 Wayland 下驯服 Chromium 输入法的完整记录
linux·运维·服务器
favour_you___4 小时前
Linux信号捕捉与穿插中断
linux·运维·服务器