解决 iDRAC paramiko库 ssh 密码登录 键盘交互身份验证的问题

解决 iDRAC SSH 键盘交互身份验证的问题

问题背景:
在通过SSH访问Dell的iDRAC(集成戴尔远程访问控制器)时,标准的密码验证方法失败。iDRAC系统配置为使用键盘交互认证,这对于使用如Paramiko等库进行自动化脚本执行构成了挑战。

背景信息:
键盘交互认证是一种服务器向客户端发送提示,客户端以交互方式响应的认证方法。这与标准的密码认证不同,标准认证中只需输入一次密码即可。在某些配置下,Dell的iDRAC需要这种方法来进行SSH认证,通常是由于安全策略或特定的固件设置所致。

解决方案实现:
为了处理键盘交互认证,可以使用paramiko库的auth_interactive_dumb方法。该方法允许脚本以编程方式响应交互提示。

以下是实现示例:

import paramiko

def keyboard_interactive_handler(title, instructions, prompt_list):
    response = []
    for prompt, echo in prompt_list:
        if 'Password:' in prompt:
            response.append('your_password')  # 替换为实际的密码
    return response

def execute_ssh_command(ip, username, password, command):
    try:
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        
        client.connect(ip, username=username, password=password, allow_agent=False, look_for_keys=False)
        transport = client.get_transport()
        transport.auth_interactive_dumb(username=username, handler=keyboard_interactive_handler)
        
        stdin, stdout, stderr = client.exec_command(command)
        output = stdout.read().decode()
        client.close()
        return output
    except paramiko.AuthenticationException:
        return "Authentication failed, please verify your credentials"
    except paramiko.SSHException as sshException:
        return f"Unable to establish SSH connection: {sshException}"
    except paramiko.BadHostKeyException as badHostKeyException:
        return f"Unable to verify server's host key: {badHostKeyException}"
    except Exception as e:
        return str(e)

# 测试命令
ip = "192.168.1.1"  # 目标服务器IP
username = "your_username"  # 替换为你的用户名
password = "your_password"  # 替换为你的密码
command = "racadm getsysinfo"  # 测试命令

output = execute_ssh_command(ip, username, password, command)
print(output)

代码说明:

  1. 键盘交互处理函数:

    • keyboard_interactive_handler函数用于处理iDRAC服务器发送的交互提示。它检查每个提示并提供必要的响应。在本例中,它查找密码提示并提供密码。
  2. Paramiko SSH客户端:

    • 创建一个Paramiko SSH客户端并配置为自动添加服务器的主机密钥。
    • 使用client.connect方法建立连接,并使用auth_interactive_dumb方法处理交互认证。
  3. 命令执行:

    • 认证完成后,可以在iDRAC系统上执行命令。在此,使用racadm getsysinfo命令获取系统信息。

挑战和考虑:

  • 安全性: 在脚本中存储明文密码存在安全风险。建议使用安全存储解决方案存储凭据。
  • 兼容性: 确保iDRAC的固件版本支持所使用的SSH功能。

结论:
这种方法提供了一种处理需要键盘交互SSH认证的系统的脚本交互方式。在无法进行用户交互的自动化环境中特别有用。

参考资料:

通过使用这些技术,即使在需要非标准认证方法的系统上,也可以实现对iDRAC的自动化SSH访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值