You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell脚本实现带Cisco DUO MFA的Linux SSH登录

解决Cisco DUO MFA交互式认证的PowerShell SSH脚本问题

问题背景

部署Cisco DUO MFA作为二次认证环节(需选择认证方式选项)后,无法通过脚本参数触发MFA认证。一级认证采用Linux用户名与密码,不确定SSH会话是在MFA认证之前还是之后建立,现有脚本无法完成MFA触发流程。

问题分析

原脚本的核心错误在于:DUO MFA是交互式SSH认证流程的一部分,并非在SSH会话建立完成后执行的命令。当调用New-SSHSession时,用户名密码认证通过后,SSH连接会卡在DUO的交互式提示阶段,此时$session.Connected并不会返回true,后续的Invoke-SSHCommand也无法正常发送命令——因为会话根本没完成认证流程。

解决方案

需要直接在SSH认证的交互式流中处理DUO MFA的选择输入,而非试图在“已建立的会话”中发送命令。以下是修改后的脚本:

# 导入Posh-SSH模块
Import-Module Posh-SSH

# 定义连接参数
$hostname = "your.linux.server"
$username = "your_username"
$password = "your_password"
$mfaOption = "1" # DUO提示中对应的推送认证选项编号

# 创建安全密码对象
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($username, $securePassword)

# 初始化SSH连接并获取交互流
try {
    $sshClient = New-SSHSession -ComputerName $hostname -Credential $credential -AcceptKey -PassThru
    $stream = $sshClient.CreateShellStream("dumb", 80, 24, 800, 600, 1024)

    # 等待并处理MFA提示
    $output = ""
    do {
        Start-Sleep -Milliseconds 500
        $output += $stream.Read()
        # 检测DUO的MFA提示关键词(根据实际提示调整,比如"Please select an authentication method")
    } until ($output -match "Please select an authentication method" -or $output -match "Verification code")

    # 发送MFA选项
    $stream.WriteLine($mfaOption)
    Write-Output "已发送MFA选项 $mfaOption,请在DUO客户端确认推送"

    # 等待认证完成并验证会话
    Start-Sleep -Seconds 10
    $whoamiOutput = Invoke-SSHCommand -SSHSession $sshClient.SessionId -Command "whoami"
    if ($whoamiOutput.Output) {
        Write-Output "认证成功,当前登录用户:$($whoamiOutput.Output)"
        # 在这里执行后续需要的命令
    } else {
        Write-Output "MFA认证失败"
    }
}
catch {
    Write-Output "连接或认证出错:$_"
}
finally {
    # 清理会话
    if ($sshClient) {
        Remove-SSHSession -SessionId $sshClient.SessionId
    }
}

关键修改说明

  • 使用CreateShellStream获取SSH的交互式输入流,直接处理认证过程中的提示信息
  • 通过循环检测DUO的MFA提示关键词,确保在正确时机发送认证选项
  • 修正了原脚本中错误假设SSH会话已在MFA前建立的逻辑

内容的提问来源于stack exchange,提问作者Vijay Js

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:53:16