import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='ip', port=22, username='', password='')
stdin, stdout, stderr = client.exec_command("docker exec -it chb /bin/bash -c 'clickhouse-backup create'")
stdin.close()
stderr.close()打印客户端通常可以远程登录,Exec_命令远程执行似乎没有执行。
发布于 2022-02-15 04:12:48
exec_command没有被很好地记录下来。运行时,命令在服务器上开始执行,并返回stdin、out和err的流。假设您的示例是完整的代码,则在命令有机会完成之前退出脚本。出口关闭取消命令的ssh通道。添加读取stdout的代码,并等待命令完成。
import paramiko
import threading
class ErrReader(threading.Thread)
def __init__(self, stream):
super().__init__(self)
self.start()
self.stream = stream
def run(self):
for line in self.stream:
print("ERR", line, end="")
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='ip', port=22, username='', password='')
stdin, stdout, stderr = client.exec_command("docker exec -it chb /bin/bash -c 'clickhouse-backup create'")
err_reader = ErrReader(stderr)
stdin.close()
stderr.close()
for line in stdout:
print(line, end="")
print(stdout.channel.recv_exit_status())
err_reader.join()https://stackoverflow.com/questions/71120856
复制相似问题