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
相关推荐
lisanmengmeng9 分钟前
zentao的prod环境升级(一)
linux·运维·数据库·docker·容器·禅道
wunianor14 分钟前
[高并发服务器]DEBUG日志
linux·运维·服务器·c++
nbsaas-boot21 分钟前
SQL Server 存储过程设计规范(事务与异常处理)
linux·数据库·设计规范
StarShip1 小时前
从Activity.setContentView()开始
android
千里马学框架1 小时前
重学SurfaceFlinger之Layer显示区域bounds计算剖析
android·智能手机·sf·安卓framework开发·layer·surfaceflinger·车载开发
Jason_zhao_MR1 小时前
米尔RK3506核心板SDK重磅升级,解锁三核A7实时控制新架构
linux·嵌入式硬件·物联网·架构·嵌入式·嵌入式实时数据库
叮咚侠1 小时前
Ubuntu 24.04.3 LTS 中 vdb 的 UUID 永久挂载没有显示的磁盘的操作步骤
linux·运维·ubuntu·挂载磁盘
.小墨迹2 小时前
C++学习之std::move 的用法与优缺点分析
linux·开发语言·c++·学习·算法·ubuntu
风华同学2 小时前
【Linux驱动篇】LED驱动开发实验
linux·驱动开发·ubuntu
李斯维2 小时前
安装 WSL 最好的方式
linux·windows