paramiko的SFTP对象实现Linux的scp功能

2018-06-17 23:32:56来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

 1 #!/usr/bin/env python
 2 # -*- coding: UTF-8 -*-
 3 
 4 import paramiko
 5 import os
 6 import re
 7 
 8 
 9 class SSHConnection(object):
10     def __init__(self, host, port, username, password):
11         self.host = host
12         self.port = port
13         self.username = username
14         self.password = password
15         self.__k = None
16 
17     def run(self):
18         self.connect()
19         self.sftp_put_dir("/opt/app/appops/sbin/collectd/var", "/opt/app/")
20         # self.cmd('ls /opt/app')
21         self.close()
22 
23     def connect(self):
24         transport = paramiko.Transport((self.host, self.port))
25         transport.connect(username=self.username, password=self.password)
26         self.__transport = transport
27 
28     def close(self):
29         self.__transport.close()
30 
31     def upload(self, loacal_path, target_path):
32         sftp = paramiko.SFTPClient.from_transport(self.__transport)
33         sftp.put(loacal_path, target_path)
34 
35     def cmd(self, command):
36         print "commadn in cmd:", command
37         ssh = paramiko.SSHClient()
38 
39         ssh._transport = self.__transport
40         stdin, stdout, stderr = ssh.exec_command(command)
41 
42         result = stdout.read()
43         print "result:\n", result
44         return result
45 
46     def getList(self, path):
47         files_list = []
48         files = sorted(filter(lambda x: re.match(r'^\w', x), os.listdir(path)))
49         for tmp_file in files:
50             path_file = os.path.join(path, tmp_file)
51             if os.path.isdir(path_file) and not os.path.islink(path_file):
52                 files_list.append(path_file)
53                 files_list += self.getList(path_file)
54             else:
55                 files_list.append(path_file)
56         return files_list
57 
58     def sftp_put_dir(self, local_dir, remote_dir):
59         sftp = paramiko.SFTPClient.from_transport(self.__transport)
60         if remote_dir[-1] == '/':
61             remote_dir = remote_dir[0:-1]
62         all_files = self.getList(local_dir)
63         for x in all_files:
64             f_path = x.replace(local_dir, "").lstrip('/')
65             if os.path.isdir(x):
66                 r_path = os.path.join(remote_dir, f_path)
67                 try:
68                     sftp.mkdir(r_path)
69                 except Exception,e:
70                     pass
71             else:
72                 remote_filename = os.path.join(remote_dir, f_path)
73                 print u'Put文件%s传输中...' % f_path
74                 sftp.put(x, remote_filename)
75 
76 
77 def main(host, port, username, password):
78     print "in main:"
79     obj = SSHConnection(host, port, username, password)
80     obj.run()
81 
82 
83 if __name__ == '__main__':
84     host = ''
85     port = ''
86     username = ''
87     password = ''
88     main(host, port, username, password)

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python

下一篇:二叉树的建立以及遍历的多种实现(python版)