当前位置: 首页 > news >正文

Ubuntu 22 下脚本登录MFA堡垒机

当 SSH 登录需要 MFA(多因素认证,如动态验证码) 时,由于涉及交互式提示(密码输入后需进一步输入验证码),普通的 ssh 或 sshpass 无法直接处理,需要使用 expect 工具 来自动化交互式会话。expect 可以监听 SSH 输出的提示信息,然后自动(或手动)输入对应的验证码。

解决思路

  1. 安装 expectexpect 是专门用于自动化交互式命令的工具,支持监听特定字符串提示并发送响应。
  2. 编写 expect 脚本:脚本中定义 SSH 连接流程,依次处理:
    • 等待密码提示,发送密码;
    • 等待 MFA 验证码提示,发送验证码(支持手动输入或自动获取,如从谷歌验证器获取)。

具体步骤

步骤 1:安装 expect
# Ubuntu/Debian
sudo apt update && sudo apt install expect# CentOS/RHEL
sudo yum install expect
步骤 2:编写 expect 脚本处理 MFA 认证

创建脚本 ssh_mfa_login.exp,根据实际的提示信息调整(重点匹配 SSH 输出的密码提示和 MFA 提示)。

示例脚本(手动输入验证码)

适用于需要用户手动输入 MFA 验证码的场景:

#!/usr/bin/expect -f# 配置参数(根据实际情况修改)
set username "admin"       # SSH 用户名
set host "192.168.1.100"   # 目标主机 IP/域名
set port "2222"            # SSH 端口
set password "mypass123"   # SSH 密码# 启动 SSH 连接
spawn ssh -p $port $username@$host# 处理密码提示(匹配类似 "Password: " 或 "password: " 的提示)
expect {"Password:" { send "$password\r" }  # 发送密码(\r 表示回车)"password:" { send "$password\r" }  # 兼容小写提示timeout { puts "连接超时(密码阶段)"; exit 1 }
}# 处理 MFA 验证码提示(匹配类似 "Verification code: " 或 "Enter MFA code: " 的提示)
expect {"Verification code:" { puts "请输入 MFA 验证码:"set mfa_code [gets stdin]  # 从终端读取用户输入的验证码send "$mfa_code\r"          # 发送验证码}"Enter MFA code:" { puts "请输入 MFA 验证码:"set mfa_code [gets stdin]send "$mfa_code\r"}timeout { puts "连接超时(MFA 阶段)"; exit 1 }eof { puts "连接失败(MFA 阶段)"; exit 1 }
}# 保持登录状态(进入交互式会话)
interact

ssh_mfa_login.exp文件放在用户目录~下。

步骤3:增加命令别名ssh_bastion方便使用

先用expect ~/ssh_mfa_login.exp检查脚本是否正确,若已经正确,则在~/.bash_aliases文件里添加下面代码:

alias ssh_bastion='expect ~/ssh_mfa_login.exp'

http://www.lryc.cn/news/613246.html

相关文章:

  • 嵌入式学习---在 Linux 下的 C 语言学习 Day10
  • 指针——练习
  • OLMo 2 架构深度解析:开放语言模型的技术革命
  • A Logical Calculus of the Ideas Immanent in Nervous Activity(神经网络早期的M-P模型)
  • 【数字图像处理系列笔记】Ch05:傅里叶变换与频率域滤波
  • 【实时Linux实战系列】实时分布式计算架构的实现
  • Mongodb常用命令简介
  • MongoDB学习专题(六)复制集和分片集群
  • 02电气设计-安全继电器电路设计(让电路等级达到P4的安全等级)
  • 内存泄漏系列专题分析之三十二:高通相机CamX ION/dmabuf内存管理机制CmdBuffer
  • VC6800智能相机:赋能智能制造,开启AI视觉新纪元
  • vue2+elementui select框可以选择可以回车添加新的option
  • Godot ------ 中级人物血条制作01
  • ElementUI之表格
  • Oracle 19C In-Memory 列存储技术测试
  • Renesas Electronics RA8M1语音套件(VK-RA8M1)
  • 深入解析Go设计模式:责任链模式实战
  • Electron 中 license-keys 的完整集成方案
  • 网络虚拟化是啥啊?
  • 自然语言处理×第四卷:文本特征与数据——她开始准备:每一次输入,都是为了更像你地说话
  • 拥抱云原生:从传统架构到云原生架构的演进与实践
  • python题目练习 无重叠区间
  • 京东关键字搜索商品列表接口开发实战:从参数优化到分布式调用
  • yolo目标检测技术:基础概念(一)
  • 【洛谷题单】--分支结构(一)
  • 脱机部署k3s
  • Python 常用内置高阶函数
  • OO SALV的栏位功能
  • 大屏数据展示页面,数据可视化可以用到的框架和插件
  • 阿里云部署若依后,浏览器能正常访问,但是apifox和小程序访问后报错链接被重置