+ J k B6 ~+ \- W5 Lssh = paramiko.SSHClient()' t9 v( l8 j4 v
* k8 y3 X. k& k% U% H% Y
然后,我们需要设置SSHClient对象的策略,用于接受SFTP服务器的主机密钥。在开发环境中,可以使用AutoAddPolicy策略,它会自动接受所有主机密钥。在生产环境中,应该使用更安全的策略:% J$ y; Z/ Q) V3 Y$ D
0 x3 }+ C3 T: k' E3 x( h# Lssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())! M* I: y- S( @8 f6 t
. Y, T D- _/ m5 z c [
接下来,使用connect方法连接到SFTP服务器。需要提供服务器的主机名、端口、用户名和密码:+ N$ a @) e* q, i$ R) G
: n7 d+ R) Q+ [7 {; @ssh.connect('hostname', port=22, username='username', password='password') ' B- b7 I/ R3 w9 U/ Q1 N2 l9 y 1 b* q8 p! P( J% ^8 h |6 ~创建SFTP会话& I+ J- y4 }1 \
成功连接到SFTP服务器后,我们需要创建一个SFTP会话。通过SSHClient对象的open_sftp方法创建一个SFTPClient对象:; r" E# D' F) D
2 [, }3 ^, `# S. n. D! l- ^
sftp = ssh.open_sftp() & j6 I% F0 b0 g; w- A+ F2 I- h7 a1 P# Y' t
上传文件' i* p j3 ]! H+ }
现在,我们可以开始进行SFTP操作了。首先,让我们看看如何上传文件。使用SFTPClient对象的put方法可以将本地文件上传到远程服务器上。需要提供本地文件路径和远程服务器的目标路径: 9 J5 F5 ~ c7 M6 G2 b) b. E ! w, j' o( r" A: Gsftp.put('local_file_path', 'remote_file_path')3 W5 H9 O: b4 V' Q+ ]% A1 E1 [8 Z( o
# \- [) g% _% Z; N6 W1 o8 x* D下载文件+ G J, I5 `7 I0 g1 \+ X$ z }& M% E
除了上传文件,我们还可以从远程服务器上下载文件。使用SFTPClient对象的get方法可以将远程服务器上的文件下载到本地。需要提供远程服务器文件路径和本地目标路径:4 }- @* s, P% f# C' l& L
- u2 m2 X5 u2 U. R P5 X9 h" x
sftp.get('remote_file_path', 'local_file_path') ' E x) t( n8 P5 I8 ~ 2 [/ W- P3 r1 @( T8 v Y1 {) V& Z列出文件和目录 9 l" I/ F: i; `/ K5 i使用SFTPClient对象的listdir方法可以列出指定目录下的文件和目录。需要提供目标路径:9 _6 q, y! Z' R& E
6 H6 o6 G: T% C1 O4 F/ z
files = sftp.listdir('directory_path')! E1 o: U" U7 x- q; F# w
. {- r: F8 c( t/ }4 a* V5 Q+ [删除文件8 [, g. ^1 V. I8 ^+ g" o% E' `
使用SFTPClient对象的remove方法可以删除指定的文件。需要提供文件路径:! }* k0 W7 T1 M- c1 T
) K% Q8 Z7 r: F3 P i2 t5 psftp.remove('file_path') # O- d9 l* v/ z$ ? ' l1 o$ p3 C( _+ E& r! I1 m关闭SFTP会话和SSH连接6 ~0 _. X+ P. d2 j
完成SFTP操作后,我们需要关闭SFTP会话和SSH连接。分别调用SFTPClient对象的close方法和SSHClient对象的close方法: 6 ]0 `( Y: c9 P. N: O9 G% P8 j0 q2 w( \+ k' V) W8 Y
sftp.close()) q; g& u5 ~% z/ m( W
ssh.close() ( t: u5 b6 F0 C6 B# e$ ]5 N5 W0 |8 F& L- ?0 L! R9 T( W
完整示例 0 Y0 X. p! ^9 D6 |/ [/ p2 B下面是一个完整的示例,演示了如何使用Python和paramiko库进行SFTP操作: # h5 ]. \, w* t* s: K% K. X8 d! S/ T( j( o$ |+ s$ P
import paramiko; o! l& z, o$ v- P' C# N- ~
! S" q# [$ @) r8 ]: w! J4 d
ssh = paramiko.SSHClient()* W1 F& i- R* q; r
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 8 C. y( D! C% O) Z r8 e8 Q/ A+ @- s. P5 Xssh.connect('hostname', port=22, username='username', password='password'), t0 v6 a) k6 a/ d" v! I
) Z7 g4 @( l; L) V r
sftp = ssh.open_sftp() & s% o) Q7 E/ i6 G' l, w" J) P0 ?! P- y6 s2 \: D
sftp.put('local_file_path', 'remote_file_path') # R& v& F9 j6 _$ k; rsftp.get('remote_file_path', 'local_file_path')- Z! |/ m( o o$ F
8 {( |; a1 q7 D+ @ Z+ p) r
files = sftp.listdir('directory_path') & D& t! N3 ~0 ?- d' H) z; J6 P3 R [* z
sftp.remove('file_path')9 D6 l" A% A# \+ s
# C% Q' B! m) S" R4 U1 @
sftp.close()) Y5 I7 w' H1 C6 p t
ssh.close() 8 ]* J2 X9 U* }$ k4 z# z7 E # N* r/ O* a* L& u( C7 M. T& e - H& z& \9 y3 |' g5 R4 ?( S( h% ?$ y$ j; D" v