带有命令输出日志记录的Paramiko Expect

时间:2020-11-04 22:09:26

标签: python paramiko pexpect

我对python不太熟悉,所以这可能是一个非常基本的问题。

我正在python 3.8上使用paramiko,我需要做的任务是逐行读取文件,并使用paramiko将每一行发送到远程服务器,远程服务器可以接受值或拒绝值作为值可能已经存在或输入可能不正确。另外,我正在读取的文件可以包含1行数据或最多10,000行数据。

由于输入可能被接受或拒绝,因此我需要捕获对这些请求的响应。我正在尝试将所有这些响应写入本地计算机上的文件。

我一直在使用paramiko期望登录到远程服务器,因为我需要导航并登录到远程服务器的特定部分以运行这些命令。我找不到任何可用来捕获响应的内置函数,因此我使用了tail()函数,但这只会捕获一部分数据。

我看到6年前问过类似的问题,并且paramiko的作者希望将输出记录在远程服务器上,但这不是我的选择。

Paramiko Expect - Tailing

我需要读取的文件示例如下:

6000054733650 0104732490 5658 5614 3782849 

我正在使用的脚本的基本版本是。

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip, username=name, password=Password)
print("Connection Successful")

interact = SSHClientInteraction(ssh_client, timeout=10000, display=False)

interact.send("LogIn" + "\r")
interact.expect([prompt, '=>'])

interact.send("logon Name Pass" + "\r")
interact.expect([prompt, '=>'])
interact.send("\r")


    for line in file:
        split = line.split(" ")

            cmd1 = split[0]
            cmd2 = split[1]
            cmd3 = split[2]
            cmd4 = split[3]               
            interact.send(cmd1 + cmd2 + cmd3 + cmd4)
            interact.expect([prompt, '=>'])
            interact.tail()

time.sleep(60)
interact.expect([prompt, '>'])
interact.send("exit" + "\r")

except Exception:
    traceback.print_exc()    
    print(interact.tail())
finally:    
    ssh_client.close()
    print(interact.tail())
    ```

0 个答案:

没有答案