4

我的测试套件有问题。我使用机器人框架和 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])

check_output()函数连接device_ip并执行命令。如果我尝试使用完全限定的域名(例如my.domain.io)连接,则会提示输入密码(为空)。我按回车键,命令定期执行。出现密码提示时是否有任何参数传递,例如 Enter ?我试过ssh -eswitch ,我不想改变 ssh 客户端,我只需要一个通用的解决方案。

控制台窗口


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

def send_ssh_command(device_ip , command):
    hostname = device_ip
    password = ""
    username = "usr1"
    port = 6022
    try:
        client = paramiko.SSHClient()
        client.load_system_host_keys()
        client.set_missing_host_key_policy(paramiko.WarningPolicy())
        client.connect(hostname, port=port, username=username, password=password)
        stdin , stdout , stderr = client.exec_command(command)
        command_return_val = stdout.read()
    finally:
        client.close()
    return command_return_val

谢谢你。

4

2 回答 2

2

为了弄清楚这一点,您寻找的唯一解决方案是将命令行上的密码传递给默认 OSssh客户端,并且不要/不能安装任何可以帮助您通过其他方式获得相同结果的库(paramiko 等) ?

我在问这个问题,因为机器人框架的SSHLibrary 开箱即用地提供了这个;你已经有了python的解决方案paramiko;而一般的linux解决方案是安装sshpass ,并使用它来传递值:

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

因此,如果所有这些都不是一个选项,那么您有两个选择 - 要么破解一些东西SSH_ASKPASS- 这是一篇带有示例的文章,或者expect用来传递它 - 这是我在两者中更喜欢的一个。

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

于 2018-06-23T05:12:59.823 回答
1

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

[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}
于 2018-06-25T11:18:43.883 回答