SSHLibrary提示输入密码

2024-04-26 17:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个测试套件的问题。我使用robot框架和python,在python中创建了一个函数,在远程Linux客户机上执行控制台命令。在

def purge_default_dns(device_ip):
    ssh_val = "usr1@" + device_ip
    command = "ctool dns | grep -v \"grep\" | awk \'{print $2}\'"
    test = check_output(["ssh", ssh_val, "-p", "6022", command])

{{cd2>与函数^连接。如果我尝试使用一个完全限定的域名(例如my.domain.io),那么我会得到一个密码提示(密码为空)。我按enter键,命令会定期执行。当密码提示出现时,是否有任何参数通过例如Enter? 我尝试了ssh -e开关,我不想改变ssh客户端,我只需要一个通用的解决方案。在

Console windows


例如,在下面的代码中使用paramiko库,我可以创建paramikoSSHClient,它有一个password参数,不提示任何内容。虽然我现在不能使用paramiko,但我需要用SSHLirary来解决这个问题。在

^{pr2}$

谢谢。在


Tags: 函数命令ip框架paramiko密码参数套件
2条回答

要想明白这一点,您需要的唯一解决方案是在命令行上将密码传递给默认的OS ssh客户机,并且不/不能安装任何库(paramiko等)来帮助您通过其他方式获得相同的结果?在

我要问这个问题,因为robot框架的SSHLibrary提供了开箱即用的方法;您已经有了带有paramiko的python解决方案;而一般的linux解决方案是安装sshpasspackage,并使用它传递值:

sshpass -p "YOUR_PASS" ssh -usr1@my.domain.io:6022

因此,如果所有这些都不是一个选项,你就有两个选择-要么在SSH_ASKPASS周围做点什么——这里是an article和一个示例,要么使用{}来传递它——这一个是我更喜欢的两个选项中的一个。在

这是一个非常好的SO answer,在expect周围有一个expect脚本包装器。在您的方法中,您必须首先创建一个包含其内容的文件,在其上设置一个可执行标志,然后在check_output()中调用该文件,并将密码“ssh”及其所有参数作为参数传递。在

为什么需要使用python,我在robotframework中使用了以下代码:

[Arguments]    ${host}=${APP_SERVER}    ${username}=${APP_USERNAME}    ${password}=${APP_PASSWORD}
Open Connection    ${host}    timeout=2m
Login    ${username}    ${password}
${out}  ${err}  ${rc}=   Execute Command   cd ${PATH};ctool dns | grep -v \"grep\" | awk \'{print $2}\' *    return_stdout=True   return_stderr=True   return_rc=True
Should Be Equal   ${rc}  ${0}

相关问题 更多 >