• 用paramiko模块写个ssh连接


    在学习了paramiko模块后,可以利用该模块连接linux服务器,然后进行一系列的linux操作。

    # -*- coding: utf-8 -*-
    
    import paramiko
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='IP地址', port=22, username='root', password='xxx')
    
    # 执行命令,可以执行linux命令或脚本
    stdin, stdout, stderr = ssh.exec_command('df')
    stdin2, stdout2, stderr2 = ssh.exec_command('pwd')
    # 获取命令结果
    result = stdout.read()
    result2 = stdout2.read()
    print result
    print result2
    # 关闭连接
    ssh.close()

    基于用户名和密码的 transport 方式登录 
    以上是传统的连接服务器、执行命令、关闭的一个操作,有时候需要登录上服务器执行多个操作,比如执行命令、上传/下载文件则无法实现,可以通过如下方式来操作

    import paramiko
      
    transport = paramiko.Transport(('IP地址',22))
    transport.connect(username='root',password='xxx')
      
    sftp = paramiko.SFTPClient.from_transport(transport)
    # 将location.py 上传至服务器并重命名 /tmp/test.py
    sftp.put('/tmp/location.py', '/tmp/test.py')
    # 将remove_path 下载到本地 local_path
    sftp.get('remove_path', 'local_path')
      
    transport.close()

     将连接封装成一个类,可以连接一次,多次操作

    import paramiko
    
    class SSHProxy(object):
        def __init__(self, hostname, port, username, password):
            self.hostname = hostname
            self.port = port
            self.username = username
            self.password = password
    
            self.transport = None
    
        def open(self):
            self.transport = paramiko.Transport((self.hostname, self.port))
            self.transport.connect(username=self.username, password=self.password)
    
        def command(self, cmd):
            ssh = paramiko.SSHClient()
            ssh._transport = self.transport
    
            stdin, stdout, stderr = ssh.exec_command(cmd)
            result = stdout.read()
            return result
    
        def upload(self, local_path, remote_path):
            sftp = paramiko.SFTPClient.from_transport(self.transport)
            sftp.put(local_path, remote_path)
            sftp.close()
    
        def close(self):
            self.transport.close()
    
        def __enter__(self):
            self.open()
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            self.close()
    
    if __name__ == '__main__':
    
        with SSHProxy("123.206.16.61",22,'root','xxx') as ssh:
            ssh.command('df')
            ssh.upload(r'D:wupeiqis27day014.基于paramiko操作xx', '/data/s27/xx')
  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/hulk-1029/p/11051453.html
Copyright © 2020-2023  润新知