三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

SSH跳板机登录优化与安全配置指南

SSH跳板机登录优化与安全配置指南

1. 跳板机登录场景解析

在分布式系统管理和跨网络运维中,跳板机(Jump Server)作为网络边界的安全枢纽,承担着关键的中转验证职责。典型场景如:开发团队需要访问内网测试服务器,但出于安全考虑,测试服务器仅允许来自跳板机的SSH连接。传统操作需要先登录跳板机A,再手动输入密码连接目标机B,整个过程耗时且容易因多次认证失败被安全系统拦截。

2. 单命令登录方案实现

2.1 SSH命令链式调用

通过SSH的-J参数(Jump host缩写)实现级联登录:

ssh -J userA@jumpserver:port userB@targetserver -p target_port

参数解析:

  • -J:指定跳板机连接路径(支持多个逗号分隔的跳板机)
  • userA@jumpserver:port:跳板机认证信息
  • userB@targetserver:目标机认证信息

2.2 免密登录配置优化

  1. 在本地生成SSH密钥对:
ssh-keygen -t ed25519 -C "jump_login_script"
  1. 将公钥分别上传至跳板机和目标机:
ssh-copy-id -i ~/.ssh/id_ed25519.pub userA@jumpserver ssh-copy-id -J userA@jumpserver userB@targetserver

3. 高级配置技巧

3.1 SSH配置文件简化

编辑~/.ssh/config添加:

Host jumpserver HostName 192.168.1.100 User admin Port 2222 Host targetserver HostName 10.10.20.30 User deploy Port 22 ProxyJump jumpserver

调用时只需执行:

ssh targetserver

3.2 多跳板机串联

对于需要经过多个安全域的场景:

ssh -J user1@jump1,user2@jump2 finaluser@target

4. 安全增强措施

4.1 会话超时控制

在跳板机/etc/ssh/sshd_config中添加:

ClientAliveInterval 300 ClientAliveCountMax 2

该配置会使闲置5分钟的会话自动断开

4.2 命令执行审计

在目标机启用auditd服务:

sudo auditctl -a exit,always -F arch=b64 -S execve

审计日志存储在/var/log/audit/audit.log

5. 常见问题排查

5.1 连接超时问题

检查顺序:

  1. 本地到跳板机的网络连通性:
telnet jumpserver 22
  1. 跳板机到目标机的路由:
ssh jumpserver "traceroute targetserver"

5.2 认证失败处理

  1. 确认密钥权限:
chmod 600 ~/.ssh/id_ed25519
  1. 检查目标机authorized_keys文件格式:
ssh targetserver "cat ~/.ssh/authorized_keys" | grep -v "^#"

6. 自动化扩展方案

6.1 Expect脚本实现

#!/usr/bin/expect set timeout 30 spawn ssh -J $env(JUMP_USER)@$env(JUMP_HOST) $env(TARGET_USER)@$env(TARGET_HOST) expect { "*password*" { send "$env(TARGET_PASS)\r" } "*yes/no*" { send "yes\r"; exp_continue } } interact

6.2 Ansible集成

在playbook中定义:

- name: Execute via jump host hosts: targetserver gather_facts: no vars: ansible_ssh_common_args: '-o ProxyJump={{ jump_user }}@{{ jump_host }}' tasks: - command: hostname

关键提示:生产环境建议使用证书认证替代密码认证,并在跳板机启用TOTP二次验证

← 返回列表