导航:首页 > 编程语言 > python写sftp

python写sftp

发布时间:2025-01-10 20:51:57

❶ 纯干货!python 在运维中的应用 (一):批量 ssh/sftp

日常工作中需要大量、频繁地使用ssh到服务器查看、拉取相关的信息或者对服务器进行变更。目前公司大量使用的shell,但是随着逻辑的复杂化、脚本管理的精细化,shell已经不满足日常需求,于是我尝试整合工作中的需求,制作适合的工具。 由于管理制度的缺陷,我以工作流程为核心思考适合自己的运维方式,提升工作效率,把时间留给更有价值的事情。 完整代码在最后,请大家参考。

生产:4000+物理服务器,近 3000 台虚拟机。

开发环境:python3.6、redhat7.9,除了paramiko为第三方模块需要自己安装,其他的直接import即可。

批量执行操作是一把双刃剑。批量执行操作可以提升工作效率,但是随之而来的风险不可忽略。

风险案例如下:

挂载很多数据盘,通常先格式化硬盘,再挂载数据盘,最后再写入将开机挂载信息写入/etc/fstab文件。在批量lsblk检查硬盘信息的时候发现有的系统盘在/sda有的在/sdm,如果不事先检查机器相关配置是否一致直接按照工作经验去执行批量操作,会很容易造成个人难以承受的灾难。

在执行批量操作时按照惯例:格式化硬盘->挂载->开机挂载的顺序去执行,假设有的机器因为某些故障导致格式化硬盘没法正确执行。在处理这类问题的时候通常会先提取出失败的ip,并再按照惯例执行操作。运维人员会很容易忽略开机挂载的信息已经写过了,导致复写(这都是血和泪的教训)。

所以,为了避免故障,提升工作效率,我认为应当建立团队在工作上的共识,应当遵守以下原则:

当然,代码的规范也应当重视起来,不仅是为了便于审计,同时也需要便于溯源。我认为应当注意以下几点:

1、ssh no existing session,sftp超时时间设置:

在代码无错的情况下大量ip出现No existing session,排查后定位在代码的写法上,下面是一个正确的示例。由于最开始没考虑到ssh连接的几种情况导致了重写好几遍。另外sftp的实例貌似不能直接设置连接超时时间,所以我采用了先建立ssh连接再打开sftp的方法。

2、sftp中的get()和put()方法仅能传文件,不支持直接传目录:

不能直接传目录,那换个思路,遍历路径中的目录和文件,先创建目录再传文件就能达到一样的效果了。在paramiko的sftp中sftp.listdir_attr()方法可以获取远程路径中的文件、目录信息。那么我们可以写一个递归来遍历远程路径中的所有文件和目录(传入一个列表是为了接收递归返回的值)。

python自带的os模块中的os.walk()方法可以遍历到本地路径中的目录和文件。

3、多线程多个ip使用sftp.get()方法时无法并发。

改成多进程即可。

4、多个ip需要执行相同命令或不同的命令。

由于是日常使用的场景不会很复杂,所以借鉴了ansible的playbook,读取提前准备好的配置文件即可,然后再整合到之前定义的ssh函数中。


同时,我们还衍生出一个需求,既然都要读取配置,那同样也可以提前把ip地址准备在文件里。正好也能读取我们返回的执行程序的结果。

参数说明:

密码认证:

公钥认证:

可以配合 grep,awk 等命令精准过滤。

个人认为 Python 在初中级运维工作中的性质更像是工具,以提升工作效率、减少管理成本为主。可以从当前繁琐的工作中解脱出来,去 探索 更有价值的事情。python 本质上并不会减少故障的产生,所以在不同的阶段合理利用自身掌握的知识解决当前最重要的痛点,千万不要本末倒置。

❷ 如何在Python中scp远程拷贝文件

Python不仅支持Web开发,还提供了强大的文件传输功能。比如,在Python中使用scp模块进行远程文件拷贝是一种常见的需求。scp模块允许你通过SSH协议安全地传输文件,适用于需要自动化文件传输的任务。

为了使用scp模块,你需要先安装paramiko库,这是一个功能丰富的SSH2协议实现。安装命令为:pip install paramiko。安装完成后,你可以使用如下代码示例进行远程文件拷贝:

python

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('hostname', username='username', password='password')

sftp = ssh.open_sftp()

sftp.put('local_file_path', 'remote_file_path')

sftp.close()

ssh.close()

在上述代码中,`hostname`、`username`、`password`需要替换为具体的远程服务器信息,而`local_file_path`和`remote_file_path`分别是本地文件路径和远程文件路径。这段代码首先通过SSH连接到远程服务器,然后使用SFTP协议进行文件传输,最后关闭连接。

需要注意的是,scp模块依赖于SSH,因此必须确保远程服务器上安装了SSH服务,并且能够通过用户名和密码或密钥进行登录。此外,scp模块不支持Windows系统,如果你在Windows上运行Python,请考虑使用其他方法,如使用Fabric或paramiko的其他功能。

总之,Python的scp模块提供了一种方便的方式来进行远程文件拷贝,特别适用于自动化脚本和持续集成环境。通过学习和实践,你可以轻松地将这项技术应用到实际项目中。

另外,除了scp模块,Python还有其他一些库和框架可以帮助你实现文件传输功能。例如,使用paramiko的SFTP接口可以实现更复杂的文件操作,如文件删除、文件重命名等。这些功能可以让你的文件传输任务更加灵活和强大。

总的来说,Python的Web框架如Django、Flask等主要用于Web开发,与文件传输功能没有直接关联。不过,这些框架可以帮助你构建完整的应用程序,其中可能包括文件上传和下载功能。对于文件传输需求,scp模块或paramiko库是更合适的选择。

❸ 如何用python将ftp文件进行下载并上传到服务器指定目

Python通过ftplib库与FTP服务器进行交互,实现文件下载与上传。具体步骤如下:

1. 首先,导入ftplib库,创建FTP对象并登录FTP服务器。

2. 使用`retrbinary()`方法下载FTP文件。传递文件名和一个回调函数,该函数接收文件内容并将其存储。

3. 使用`storbinary()`方法上传文件到FTP服务器。传递文件名、一个打开的文件对象和一个回调函数,该函数接收服务器的应答。

4. 通过`quit()`或`close()`方法关闭FTP连接。

使用ftplib进行FTP操作适用于标准FTP服务,但存在安全性问题。

与之相比,SFTP(SSH文件传输协议)提供更安全的文件传输。Python通过paramiko库支持SFTP。

1. 首先,确保已经安装了paramiko库。若未安装,使用pip命令安装。

2. 使用`Transport`类建立SSH连接。

3. 创建`SFTPClient`对象,通过SSH连接进行文件操作。

4. 使用`SFTPClient`对象的`get()`方法下载SFTP文件,或`put()`方法上传文件。

5. 结束SFTP会话,关闭SSH连接。

SFTP提供加密传输,相较于标准FTP更安全。

总结,ftplib用于基本的FTP操作,适合非加密环境;而paramiko库支持安全的SFTP协议,适用于需要加密传输的场景。

阅读全文

与python写sftp相关的资料

热点内容
程序员需求表 浏览:640
为什么安卓不能用qq登录 浏览:690
公开密钥加密哪年 浏览:829
程序员向 浏览:469
鼠标指针压缩包下载 浏览:762
登录认证失败请检查账号服务器地址 浏览:737
解压游戏覆盖方式 浏览:533
遗传算法的变异算子怎么实现 浏览:685
spring如何添加app 浏览:664
python循环import 浏览:552
怎样把js代码加密 浏览:800
frp服务器百度云 浏览:792
12306算法 浏览:630
单片机驱动小马达 浏览:100
pythoncookbook27 浏览:518
c的指针和python 浏览:186
python写sftp 浏览:958
读文pdf 浏览:507
pythonnumpy内积 浏览:782
linux硬盘模式 浏览:15