如何SSHClient
在远程服务器上进行 SFTP 传输?我有一个本地主机和两个远程主机。远程主机是备份服务器和 Web 服务器。我需要在备份服务器上找到必要的备份文件并通过 SFTP 将其放在 Web 服务器上。如何使 Paramiko 的 SFTP 传输与 Paramiko 的一起工作SSHClient
?
问问题
133651 次
4 回答
187
样品用法:
import paramiko
paramiko.util.log_to_file("paramiko.log")
# Open a transport
host,port = "example.com",22
transport = paramiko.Transport((host,port))
# Auth
username,password = "bar","foo"
transport.connect(None,username,password)
# Go!
sftp = paramiko.SFTPClient.from_transport(transport)
# Download
filepath = "/etc/passwd"
localpath = "/home/remotepasswd"
sftp.get(filepath,localpath)
# Upload
filepath = "/home/foo.jpg"
localpath = "/home/pony.jpg"
sftp.put(localpath,filepath)
# Close
if sftp: sftp.close()
if transport: transport.close()
于 2010-09-03T11:10:27.210 回答
14
接受的答案“有效”。但是由于使用了低级Transport
类,它绕过了主机密钥验证,这是一个安全漏洞,因为它使代码容易受到中间人攻击。
更好的是使用正确的 Paramiko SSH API,SSHClient
它会验证主机密钥:
import paramiko
paramiko.util.log_to_file("paramiko.log")
ssh = paramiko.SSHClient()
ssh.connect(host, username='user', password='password')
# or
# key = paramiko.RSAKey.from_private_key_file('id_rsa')
# ssh.connect(host, username='user', pkey=key)
sftp = ssh.open_sftp()
sftp.get(remotepath, localpath)
# or
sftp.put(localpath, remotepath)
有关验证主机密钥的详细信息,请参阅:
Paramiko“未知服务器”
于 2021-03-20T16:43:02.240 回答
8
如果你有 SSHClient,你也可以使用open_sftp()
:
import paramiko
# lets say you have SSH client...
client = paramiko.SSHClient()
sftp = client.open_sftp()
# then you can use upload & download as shown above
...
于 2019-09-22T06:23:47.573 回答
1
除了第一个很好但取决于用户名/密码的答案之外,以下显示了如何使用 ssh 密钥:
from paramiko import Transport, SFTPClient, RSAKey
key = RSAKey(filename='path_to_my_rsakey')
con = Transport('remote_host_name_or_ip', 22)
con.connect(None,username='my_username', pkey=key)
sftp = SFTPClient.from_transport(con)
sftp.listdir(path='.')
于 2021-03-19T15:34:04.743 回答