python paramiko

  

paramiko基于SSH连接ssh Server执行操作(SSHClient远程连接,SFTPClient上传下载)

  1. pip install paramiko

     

  2. 简单示例
    复制代码
    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()
    复制代码

     

  3. 结合多线程
    复制代码
    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'),
    ]
    复制代码

     

  4. 交互式链接
    复制代码
    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()
    复制代码

     

  5. 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()
    复制代码

     

posted @   ascertain  阅读(97)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示