paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux,Solaris,BSD,MacOS X,Windows等平台
通过SSH从一个平台连接到另外一个平台,利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。
一,paramiko的连接
有两种连接方式:
方法一:
方法二:
示例(通过paramiko进行ssh连接并执行命令的函数),如下:
在函数调用过程中需要注意的是,ip,username,password都是属于字符串型的,所以要加引号,后面执行的cmd,如果有多个命令需要操作时,需要通过
分号进行分割。
四,paramiko sftp示例
注意:get和put方法每次只能传输一个文件,而不是整个目录。
下面参考链接:https://www.cnblogs.com/haigege/p/5517422.html
如何传输整个目录?
1,如果是要get则采用已经定义的connect方法连接到linux主机,然后通过send方法执行tar命令将需要传输的整个目录打包。再传输打包后的文件即可
如果是put则需要在本地打包
该方法的缺点是:在远端或者本地进行打包或者解压,并且打包会占用临时存储空间,如果是远端打包还需先SSH连接linux主机
2,遍历需要get或put目录及其子目录,然后依次传输每一个文件。优点是不需要SSH登录和打包解压,缺点是需要目录扫描
上面的方法是写在一个类里面,上面的方法中需要传的参数:已经建立的sftp连接,remote_dir要扫描的远程路径
在扫描目录时,使用listdir_attr方法会列出指定目录下的所有文件或目录,并且还会列出其属性,比如st_size,st_uid,st_gid,st_mode,st_atime,st_mtime.
我们就是根据其中的st_mode属性来判断是一个目录还是文件,并且处理st_mode的方法,可以通过引入stat模块下的S_ISDIR方法进行处理。
上面的方法是获取到所有文件的列表,下面的方法是根据上面的方法依次遍历
下面再看看put,其实与get几乎一样,现在扫描本地目录,然后依次遍历文件并put到远端
由于是对本地目录做扫描,因此不需要调用SFTP中的文件目录处理接口了,直接使用python的os库即可,代码如下:
上传的步骤和上面下载的步骤一样,只需把路径顺序换一下,get改成put就可以了
上面代码主要写的是连接方式和上传下载文件以后遇到更多继续做记录