python paramiko
paramiko基于SSH连接ssh Server执行操作(SSHClient远程连接,SFTPClient上传下载)
-
pip install paramiko
- 简单示例
import paramiko ssh = paramiko.SSHClient() # 创建ssh客户端 know_hosts = paramiko.AutoAddPolicy() # 创建ssh白名单 ssh.set_missing_host_key_policy(know_hosts) # 加载白名单 ssh.connect( # 链接server hostname='192.168.100.41', port=22, username='root', password='aegis' ) stdin, stdout, stderr = ssh.exec_command('ip r') # 执行命令 print(stdout.read().decode(encoding='utf8')) ssh.close()
- 结合多线程
from settings import pool import paramiko, threading class ParamikoThreading(threading.Thread): def __init__(self, host, username, password, port=22, command='ip a'): self.host = host self.username = username self.password = password self.port = port self.command = command super(ParamikoThreading,self).__init__() def run(self) -> None: ssh=paramiko.SSHClient() know_hosts=paramiko.AutoAddPolicy() ssh.set_missing_host_key_policy(know_hosts) ssh.connect( hostname=self.host, port=self.port, username=self.username, password=self.password ) stdin,stdout,stderr=ssh.exec_command(self.command) print('*'*60) print('ip:%s,\ncommand:%s,\n' % (self.host,self.command)) print(stdout.read().decode(encoding='utf8')) print('*'*60) ssh.close() if __name__ == '__main__': command='ip a' t_pool=[] for host in pool: t=ParamikoThreading( host=host.get('host','localhost'), username=host.get('username','root'), password=host.get('password','aegis'), command=command ) t_pool.append(t) for t in t_pool: t.start() for t in t_pool: t.join()
settings.py
pool=[ dict(host='192.168.100.41',username='root',password='aegis'), dict(host='192.168.100.42',username='root',password='aegis'), dict(host='192.168.100.43',username='root',password='aegis'), ]
- 交互式链接
import paramiko ssh=paramiko.SSHClient() know_hosts=paramiko.AutoAddPolicy() ssh.set_missing_host_key_policy(know_hosts) ssh.connect( hostname='192.168.100.41', username='root', password='aegis', port=22 ) shell=ssh.invoke_shell() shell.settimeout(1) command=input('>>>'+'\n') shell.send(bytes(command,encoding='utf8')) while True: try: recv=shell.recv(1024).decode(encoding='utf8',errors='ignore') if recv: print(recv) else: continue except: command=input('>>>'+'\n') shell.send(bytes(command,encoding='utf8')) ssh.close()
- sftp文件upload and download
import paramiko trans=paramiko.Transport( sock=('192.168.100.41',22) ) trans.connect( username='root', password='aegis' ) sftp=paramiko.SFTPClient.from_transport(trans) # upload # sftp.put('settings.py','/root/settings.py') # download sftp.get('/root/oom.c','oom.c') sftp.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律