【问题标题】:Nested SSH with Paramiko exit while loop带有 Paramiko 的嵌套 SSH 退出 while 循环
【发布时间】:2020-04-27 07:36:33
【问题描述】:

我正在尝试使用 Paramiko 创建一个解决方案,该解决方案允许在输出中获取匹配标准的第一行。我添加了 while 循环以等待输出可用(有时命令将在一小时内运行更多)。 目前我有:

  1. 连接跳转主机
  2. 调用 shell 和 ssh 到第二台主机
  3. 运行命令
  4. 等待(使用 while 循环)所需的输出可用。
  5. 另存为字符串。

但是在需要的输出可用后,我在中断 while 循环时遇到了问题。

这是我的代码。

import paramiko
from time import sleep

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('jumphost', username='User', password='Passw')
sleep(2)
channel = ssh.invoke_shell()
channel.send('ssh secondHost\n')
sleep(2)
channel.send('Command1\n')
#sleep(2)
buff=''

while channel.recv_ready():
    while not buff.endswith('$ '):
        resp = channel.recv(9999)
        for line in resp.split('\n'):
            if line.startswith('Line1'): 
               print(line)
               buff+=line
               break
    break
print 'buff', buff
ssh.close()

【问题讨论】:

    标签: python ssh paramiko ssh-tunnel


    【解决方案1】:

    SSHClient.invoke_shell 用于实现交互式终端会话(例如,如果您正在实现自己的 SSH 终端客户端),而不是用于自动执行命令。终端是一个带有输入和输出的黑盒子。它没有任何 API 来执行命令并等待它完成。


    使用SSHClient.exec_command 执行命令并使用Channel.recv_exit_statusChannel.exit_status_ready 等待它完成。

    Wait until task is completed on Remote Machine through Python


    当您在命令内执行命令时(ssh 内的Command1),您需要将Command1 发送到ssh 输入。

    Execute (sub)commands in secondary shell/command on SSH server in Python Paramiko

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2016-05-03
      相关资源
      最近更新 更多