QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2763|回复: 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操作。
3 W* C4 q( R: Z* |5 t+ B0 \# H9 ]3 x9 d! d5 }5 k
安装paramiko库
- S8 r5 Z. z7 v; d$ g( l2 \% g首先,我们需要安装paramiko库。在命令行中执行以下命令:! G- \9 z1 J% M7 `/ ]" C% h
. j; u4 `% [! T' f1 d3 k) j. [
pip install paramiko
  ~$ V4 e* M4 p' C( M$ @. L! s连接到SFTP服务器9 B- C0 b" g# y) [
接下来,我们需要连接到SFTP服务器。首先,导入paramiko库并创建一个SSHClient对象:  X" G5 \$ ?  q" _8 V

5 x( j# {+ y* vimport paramiko
' D3 ^1 s7 ~$ S5 Y8 Y
6 e' ]" I: y1 h! o3 E" G3 dssh = paramiko.SSHClient()
+ L* y7 v6 l! z3 Q" z) V% a$ v
" {9 p, R2 c5 q% t: E7 t6 X) x% i然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:
& E: d: I! p6 M; L: G1 H! V0 n3 ?# L! D$ |4 Z
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())- N. X' {- u9 D7 Y/ T: G  c! v1 _% I

. _  ^* o" `+ \3 h* k接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:
! U  k+ b$ X( i! f  ]3 L
3 W$ @. k, A' Qssh.connect('hostname', port=22, username='username', password='password')4 i2 _7 i. @. C

% x# q5 H' ^% e3 X8 Z2 T创建SFTP会话- C, L( h: _9 y( B( J" E
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:2 z# |# {0 b  V2 c- @# V1 f  ?

# W6 R! a  F- c- c* zsftp = ssh.open_sftp()
- F- \, `, T! i7 Z5 V5 K+ @) Y, W
3 o# y7 _  M$ z. D3 o: @& \+ O5 t上传文件
% Z# X! R5 p3 p: |+ L现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径:$ A8 ^1 e& c& h& v* R
- s- b4 T) v9 `
sftp.put('local_file_path', 'remote_file_path')
$ q! Q& Q( d% |3 [6 \$ l
+ e. N" R$ S0 o: _下载文件
3 [+ h4 R+ o; Z/ D! P( N& `除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:. G7 |, W0 h& O& o9 W8 u
3 f8 L( k/ k& ~+ B' O
sftp.get('remote_file_path', 'local_file_path')% _3 J1 X: h+ W: Y

- ]- p! w: b0 |6 V/ G, ~2 z! w列出文件和目录
- P5 `8 x" A1 D( t: E使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:
# b  V! C7 \, g4 Z! u* {. n9 B9 s! f/ Z4 A6 ]
files = sftp.listdir('directory_path')
4 e& y# w- V8 S( ?1 _( ~' J) t1 b2 U1 b
删除文件( T; ?, [- G/ m# I0 Z$ U% O8 O
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:1 n5 w/ P+ E- n( c$ n& h
  K+ N6 }# n: v( p5 O
sftp.remove('file_path')1 }6 m9 Z  |* B$ C# h0 z8 G

7 s6 p9 M! p& }( j* x, [关闭SFTP会话和SSH连接- i" m8 A- |, p. q. ?
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法:2 Z- B7 f$ V3 G) a. ]. p$ p

8 T% X2 f" H  a. ksftp.close()
7 Z% M6 A$ C) g" Zssh.close(): v" U0 q+ m# T8 M9 o* k. L
) Z$ J) V5 M" x' q8 W( s8 ~
完整示例
% b) [9 e6 }7 z7 `  w* P下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作:: m$ P) j' w0 F$ Y  g

5 [/ s2 |# R) iimport paramiko; w4 ~* X, d1 D- l2 f6 v. z
3 l# s3 `0 L2 s4 T
ssh = paramiko.SSHClient()" s# x) i: g* P3 t! L
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
4 d4 ?0 m, G& o. d
4 [# ^4 f+ `3 D8 Q4 N, p: Issh.connect('hostname', port=22, username='username', password='password')& w0 O6 |+ m, E" Y9 K3 r
% V! y. S. \6 U+ R- A
sftp = ssh.open_sftp()3 u! M1 J: C1 p6 x0 J% U

- [; J0 `+ d+ |- esftp.put('local_file_path', 'remote_file_path')
5 c6 w( D4 p6 D- Lsftp.get('remote_file_path', 'local_file_path')
, F* V" N) a, E; P; [
$ X6 x  s  L  e$ U$ k! Rfiles = sftp.listdir('directory_path')9 h- {4 U' b- R& I8 m3 e/ P7 {5 E3 l
! j  A* e9 a" ~9 C6 T
sftp.remove('file_path')
3 ?! A- K; R/ j+ I5 b
) v: Z- l+ [# x, u9 z* `$ _sftp.close()6 S$ Y3 C/ G" L) z
ssh.close()  S* U# e; O# N1 ]

* E6 n5 i- V( v# h* H2 G/ n7 q* S7 y1 ^
% z9 ?+ M* R) u/ i* t, {2 W& E' m8 @( r* B
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-8-5 07:13 , Processed in 0.384118 second(s), 50 queries .

回顶部