zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    pat1038. Recover the Smallest Number (30)
    pat1037. Magic Coupon (25)
    pat1036. Boys vs Girls (25)
    pat1031. Hello World for U (20)
    pat1030. Travel Plan (30)
    pat1028. List Sorting (25)
    pat1027. Colors in Mars (20)
    pat1017. Queueing at Bank (25)
    pat1025. PAT Ranking (25)
    Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/hupeng1234/p/6718527.html
Copyright © 2011-2022 走看看