gpt4 book ai didi

python - SSHLibrary 提示输入密码

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:17 26 4
gpt4 key购买 nike

我的测试套件有问题。我使用机器人框架和 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 -e 开关,我不想更改 ssh 客户端,我只需要一个通用的解决方案。

Console windows


例如在下面的代码中使用 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

谢谢。

最佳答案

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

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

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

因此,如果所有这些都不是一个选项,那么您有两个选择 - 要么绕过 SSH_ASKPASS - 这里是 an article使用示例,或使用 expect 传递它 - 这是我在两者中更喜欢的。

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

关于python - SSHLibrary 提示输入密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50989698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com