paramiko 实现远程切换root
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # 远程执行docker 命令 def exec_cod(host, username, password, port, root_pwd, image_count, cmd, cmd2): s = paramiko.SSHClient() s.load_system_host_keys() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) s.connect(hostname = host, port = int (port), username = username, password = password) if username ! = 'root' : ssh = s.invoke_shell() time.sleep( 0.1 ) ssh.send( 'su - \n' ) buff = '' while not buff.endswith( 'Password: ' ): resp = ssh.recv( 9999 ) buff + = resp.decode( 'utf-8' ) ssh.send(root_pwd) ssh.send( '\n' ) buff = '' while not buff.endswith( '# ' ): resp = ssh.recv( 9999 ) buff + = resp.decode( 'utf-8' ) if host = = '10.210.0.71' or host = = '10.210.0.73' : ssh.send( 'docker-compose -f /home/ubuntu/ruo/docker-compose.yml scale php=' + str (image_count)) else : ssh.send( 'docker-compose -f /root/ubuntu/ruo/docker-compose.yml scale php=' + str (image_count)) ssh.send( '\n' ) buff = '' while not buff.endswith( '# ' ): resp = ssh.recv( 9999 ) buff + = resp.decode( 'utf-8' ) print (buff) if host = = '10.210.0.71' or host = = '10.210.0.73' : ssh.send( 'docker-compose -f /home/ubuntu/ruo/docker-compose.yml restart' ) else : ssh.send( 'docker-compose -f /root/ubuntu/ruo/docker-compose.yml restart' ) ssh.send( '\n' ) buff = '' while not buff.endswith( '# ' ): resp = ssh.recv( 9999 ) buff + = resp.decode( 'utf-8' ) print (buff) ssh.send( 'docker ps' ) ssh.send( '\n' ) buff = '' while not buff.endswith( '# ' ): resp = ssh.recv( 9999 ) buff + = resp.decode( 'utf-8' ) s.close() result = buff print (buff) else : pass # stdin, stdout, stderr = s.exec_command(cmd) # result = stdout.read() # s.close() return result |
标签:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义