• python ssh之paramiko模块使用


    1.安装:

    sudo pip install paramiko

    2.连接到linux服务器

    方法一:

    #paramiko.util.log_to_file('ssh.log') #写日志文件
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在~/.ssh/known_hosts文件中的主机
    client.connect('ip',22, 'username','password')  #指定ip地址,端口,用户名和密码进行连接

    方法二:

    transport = paramiko.Transport(('ip', port)) #获取连接
    transport.connect(username='username',password='password')
    ssh = paramiko.SSHClient()
    ssh._transport = transport

    3.用transport实现上传下载以及命令的执行

    # coding=utf-8
    import paramiko
    
    class SSHConnection(object):
        def __init__(self, host, port, username, password):
            self._host = host
            self._port = port
            self._username = username
            self._password = password
            self._transport = None
            self._sftp = None
            self._client = None
            self._connect()  # 建立连接
    
         def _connect(self):
            transport = paramiko.Transport((self._host, self._port))
            transport.connect(username=self._username, password=self._password)
            self._transport = transport
    
        #下载
        def download(self, remotepath, localpath):
            if self._sftp is None:
                self._sftp = paramiko.SFTPClient.from_transport(self._transport)
            self._sftp.get(remotepath, localpath)
    
        #上传
        def put(self, localpath, remotepath):
            if self._sftp is None:
                self._sftp = paramiko.SFTPClient.from_transport(self._transport)
            self._sftp.put(localpath, remotepath)
    
        #执行命令
        def exec_command(self, command):
            if self._client is None:
                self._client = paramiko.SSHClient()
                self._client._transport = self._transport
            stdin, stdout, stderr = self._client.exec_command(command)
            data = stdout.read()
            if len(data) > 0:
                print data.strip()   #打印正确结果
                return data
            err = stderr.read()
            if len(err) > 0:
                print err.strip()    #输出错误结果
                return err
    
        def close(self):
            if self._transport:
                self._transport.close()
            if self._client:
                self._client.close()
    
    
    if __name__ == "__main__":
        conn = SSHConnection('192.168.87.200', 22, 'username', 'password')
        localpath = 'hello.txt'
        remotepath = '/home/hupeng/WorkSpace/Python/test/hello.txt'
        print 'downlaod start'
        conn.download(remotepath, localpath)
        print 'download end'
        print 'put begin'
        conn.put(localpath, remotepath)
        print 'put end'
    
        conn.exec_command('whoami')
        conn.exec_command('cd WorkSpace/Python/test;pwd')  #cd需要特别处理
        conn.exec_command('pwd')
        conn.exec_command('tree WorkSpace/Python/test')
        conn.exec_command('ls -l')
        conn.exec_command('echo "hello python" > python.txt')
        conn.exec_command('ls hello')  #显示错误信息
        conn.close()
  • 相关阅读:
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    CDH版本Hbase二级索引详细配置方案Solr key value index(二)中文分词
    CDH版本Hbase二级索引详细配置方案Solr key value index
    Seccon2017-pwn500-video_player
    Linux ASLR的实现
    0ctf2017-pages-choices
    33c3-pwn500-recurse
    关于C++中的string的小知识点
    Apache Kylin(三)Kylin上手
  • 原文地址:https://www.cnblogs.com/shengy/p/7497802.html
Copyright © 2020-2023  润新知