python - Paramiko 频道发送请求以远程启动跟踪
问题描述
我是这个概念的新手,所以请帮忙!
我正在使用 Paramiko Channel 执行命令并开始跟踪。我希望跟踪继续运行,直到我发送停止请求进行跟踪。如果我使用 channel.send(cmd) 它会启动和停止跟踪,而我希望跟踪应该继续并且仅在我发送任何停止请求时停止,因为在停止跟踪之前我还有其他操作要执行。
注意:我正在使用 Paramiko 的一台机器上进行 SSH,并在该机器上启动一个新通道以 ssh 到另一台机器上以在那里开始跟踪。我尝试了 exec_command 但它关闭了套接字。
我想知道的事情:
- 我怎样才能开始跟踪,而不是让命令在返回之前停止它
- 如何在开始跟踪后执行我的操作后停止跟踪。
我正在使用的代码:
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)
提前感谢您的帮助!
解决方案
下面的示例显示,在永远执行的 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')
推荐阅读
- swift - Swift 4.2 访问已安装卷中目录的内容
- python - 输入字段中添加的值不是 int 值时显示错误
- angular - SVG 在 Safari 12 上显示错误
- php - Laravel 验证,其中一个文件是唯一的,而其他文件必须有一些 id
- android-cardview - 如何正确使用 CardView getCardBackgroundColor
- docker - 如何容器化依赖数据库的服务?
- python - 删除numpy数组中的孤立单元格
- go - AutoMigrate 未更新约束 - MySQL
- react-native - 如何在水平方向上为文本提供渐变 react-native-svg
- android - 如何实现 shouldShowRequestPermissionRationale?