QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2744|回复: 0
打印 上一主题 下一主题

Python SFTP 详细使用

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-21 16:20 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
SFTP(SSH File Transfer Protocol)是一种基于SSH协议的安全文件传输协议。Python提供了paramiko库来实现SFTP功能。本文将详细介绍如何使用Python和paramiko库进行SFTP操作。( ^: w3 @! k1 c8 J% D* Z
! ^  c2 X' X3 Y5 w& I9 F
安装paramiko库
' l9 ]. B3 q; i6 U; k8 i首先,我们需要安装paramiko库。在命令行中执行以下命令:/ x3 N0 f* q( V7 N, y

6 M8 }- n  }3 S* Bpip install paramiko* T# ~1 I2 Q( c6 w$ `4 h' ~
连接到SFTP服务器
) Y; T- e; {8 `+ r, C  j0 t' k接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:
0 d( y- c8 o2 ?0 X, N& }
" i0 H# {- A8 J  M' r9 q0 w- mimport paramiko! \, w7 k# H* I( ]

2 g' q/ }8 @& v1 v% X2 [. Yssh = paramiko.SSHClient()& l% \7 [8 c8 e$ c$ V

% X+ v2 R% m1 B然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
/ C; p# d1 H: G! F8 T% [% s( d
0 f8 c% g4 g; W" w% O2 yssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
/ f. r4 ~5 ], h0 |6 F+ R1 x$ E
6 K" u% M7 N: F( p  |接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:' Q/ o, [/ }3 h& e9 g2 n
* [: M  T4 ~0 {/ C% H% X
ssh.connect('hostname', port=22, username='username', password='password')( E: ]; U' M( a9 `# ?+ |, N
, b) ^$ e0 Z: K# m5 c- f
创建SFTP会话
3 n5 Q, v% |  G7 h成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:
3 K& U; u5 t2 ], Z! r+ d& g& w8 f& O( K" ^7 w6 a8 ^
sftp = ssh.open_sftp()
- E. c7 ]+ A% e/ j& Q, d9 |" \
+ ^/ |3 o2 r, x* Q, P. E( n' P( X上传文件
8 ]/ h$ [4 |+ o现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:
$ \# g+ g$ Y2 j; H' K, P8 |1 I1 x) ^3 n3 ^2 V& {( M; \
sftp.put('local_file_path', 'remote_file_path')
* y  l, t' g2 q( m0 h! N& k8 M5 d
/ }# S2 U" [* r9 ~下载文件
+ L0 c4 M! G/ X  v3 u, r* a除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:
7 Y* P! d* }, I
, d  C! L8 }9 ^# e3 |, O) L2 Rsftp.get('remote_file_path', 'local_file_path')0 M9 ?! T5 z7 V. d9 a3 x
, w3 ^/ c7 S. G; l+ ^: R) A0 P6 J
列出文件和目录
, I) V$ F* j. F) Z0 U: G使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:4 [4 S0 K" q) ~

: H. `8 ]1 k7 @0 b3 o: W& mfiles = sftp.listdir('directory_path')
3 d1 x' I7 a6 i+ X& `) E$ F! |/ q3 ~. q" Y0 Y
删除文件' S; t# W" }- P
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:, d( e) J' \' N. X. F+ A

6 j; O7 q$ f* ?, @- Lsftp.remove('file_path'); h0 o& U. a1 n, Y) @% Q
* C  W2 i# E: o  {8 ?
关闭SFTP会话和SSH连接
1 h( p3 o. f) u8 I- F2 j完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:# \  F5 \' ]" F) m3 o* K! ?4 c

6 `3 g. B8 l7 b- @( l' ysftp.close()# j9 H% w6 ?$ y( v/ f- l" N( L6 T
ssh.close()
  K6 A# ^. }! C/ |
$ s0 }2 F- z8 x5 B1 `( g. x6 N完整示例3 o) ?# w. T( y
下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:
6 Y9 s0 K9 C' D
4 W+ C, \, p6 Vimport paramiko
3 S) U9 k$ a& |% P( e" Q5 C. N9 z1 I' q- R+ \# R1 {9 n
ssh = paramiko.SSHClient()
5 w3 ]& L' B$ D# N% D& Xssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
( i- y/ f. j  E4 e2 P2 d* ^% k' [
4 W% O: Y, ~! ?8 bssh.connect('hostname', port=22, username='username', password='password')/ c: g- W: u5 Q$ `6 G6 \0 _

0 ~4 Z% L% I9 m. M- S: usftp = ssh.open_sftp()
: O$ R8 ]  |) |. y
7 w: ?& q- d- O% Ksftp.put('local_file_path', 'remote_file_path')0 k$ l* O& i1 h, X  ~5 h; p0 {
sftp.get('remote_file_path', 'local_file_path')! ?( X4 o; W& b: J# I: U
$ s  T$ O- S( u9 R& p9 S
files = sftp.listdir('directory_path')
7 p. I8 F  }5 j4 [! W; u0 N4 i# z/ Y3 {/ H2 t9 q6 v* _+ \  a
sftp.remove('file_path')
. z. T4 _1 w& J7 l5 \- V) p* U# K* h
sftp.close()* \& g3 h7 N; ~0 q) k" k, {
ssh.close(). C9 w# q- I6 W# b4 E% l

1 o- t/ e( J6 A0 }% a0 |% o/ c$ s  z

5 {8 N) U" O" n  t8 q' [
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-7-10 10:40 , Processed in 0.317032 second(s), 51 queries .

回顶部