首页 > 解决方案 > Paramiko 频道发送请求以远程启动跟踪

问题描述

我是这个概念的新手,所以请帮忙!

我正在使用 Paramiko Channel 执行命令并开始跟踪。我希望跟踪继续运行,直到我发送停止请求进行跟踪。如果我使用 channel.send(cmd) 它会启动和停止跟踪,而我希望跟踪应该继续并且仅在我发送任何停止请求时停止,因为在停止跟踪之前我还有其他操作要执行。

注意:我正在使用 Paramiko 的一台机器上进行 SSH,并在该机器上启动一个新通道以 ssh 到另一台机器上以在那里开始跟踪。我尝试了 exec_command 但它关闭了套接字。

我想知道的事情:

  1. 我怎样才能开始跟踪,而不是让命令在返回之前停止它
  2. 如何在开始跟踪后执行我的操作后停止跟踪。

我正在使用的代码:

    chan = sshClient.get_transport().open_session() 
    chan.get_pty()
    chan.invoke_shell()
    chan.send(cmdline +'\n')
    while not sshClient.recv_ready():
        print("Waiting")
    resp = chan.recv(9999)
    print(resp)

提前感谢您的帮助!

标签: pythonparamikosocketchannel

解决方案


下面的示例显示,在永远执行的 while 循环中,您执行命令然后打印输出。完成后,它再次发送命令

import base64
import paramiko
import time

key = paramiko.RSAKey(data=base64.b64decode(b'AAA...'))
client = paramiko.SSHClient()
client.get_host_keys().add('ssh.example.com', 'ssh-rsa', key)
client.connect('ssh.example.com', username='strongbad', password='thecheat')
while True: 
  time.sleep(5)
  stdin, stdout, stderr = client.exec_command('ls')
  for line in stdout:
     print('... ' + line.strip('\n'))
client.close()

您可能需要\n在每个命令之后发送一个换行符,以便client.exec_command('ls')变为 ->client.exec_command('ls\n')


推荐阅读