📅  最后修改于: 2023-12-03 15:18:54.359000             🧑  作者: Mango
在Python中,我们可以使用paramiko模块来连接SFTP服务器并进行文件传输。 Paramiko是一个纯Python的SSH2协议实现,内含SFTP客户端和服务器端实现。
要连接SFTP服务器并使用密钥进行身份验证,需要以下步骤:
pip install paramiko
import paramiko
private_key_path = "/path/to/my/private/key"
sftp_host = "sftp.example.com"
sftp_username = "my_username"
sftp_port = 22
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
# 连接SFTP服务器
ssh.connect(hostname=sftp_host, username=sftp_username, port=sftp_port, key_filename=private_key_path)
在上面的代码中,我们使用paramiko.SSHClient()创建了一个SSH客户端,并使用paramiko.AutoAddPolicy()设置了缺失主机密钥时的策略,然后使用ssh.load_system_host_keys()加载本地的SSH密钥。接着,我们使用ssh.connect()方法连接到SFTP服务器,其中我们传递了主机名,用户名,端口和密钥文件路径。
import paramiko
private_key_path = "/path/to/my/private/key"
sftp_host = "sftp.example.com"
sftp_username = "my_username"
sftp_port = 22
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
# 连接SFTP服务器
ssh.connect(hostname=sftp_host, username=sftp_username, port=sftp_port, key_filename=private_key_path)
# 创建SFTP客户端
sftp = ssh.open_sftp()
# 上传文件
local_file_path = "/path/to/local/file"
remote_file_path = "/path/to/remote/file"
sftp.put(local_file_path, remote_file_path)
# 下载文件
local_file_path = "/path/to/local/file"
remote_file_path = "/path/to/remote/file"
sftp.get(remote_file_path, local_file_path)
# 关闭SFTP客户端
sftp.close()
# 关闭SSH客户端
ssh.close()
在上面的代码中,我们首先创建了一个SFTP客户端,并使用ssh.open_sftp()方法打开SFTP通道。接着,我们使用sftp.put()方法将本地文件上传到远程服务器,或使用sftp.get()方法将远程服务器上的文件下载到本地。最后我们使用sftp.close()和ssh.close()关闭SFTP和SSH客户端。
通过以上步骤,我们就可以使用Python连接SFTP服务器并使用密钥进行身份验证并进行文件传输。
完整代码片段:
import paramiko
private_key_path = "/path/to/my/private/key"
sftp_host = "sftp.example.com"
sftp_username = "my_username"
sftp_port = 22
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
# 连接SFTP服务器
ssh.connect(hostname=sftp_host, username=sftp_username, port=sftp_port, key_filename=private_key_path)
# 创建SFTP客户端
sftp = ssh.open_sftp()
# 上传文件
local_file_path = "/path/to/local/file"
remote_file_path = "/path/to/remote/file"
sftp.put(local_file_path, remote_file_path)
# 下载文件
local_file_path = "/path/to/local/file"
remote_file_path = "/path/to/remote/file"
sftp.get(remote_file_path, local_file_path)
# 关闭SFTP客户端
sftp.close()
# 关闭SSH客户端
ssh.close()
以上就是如何使用Python连接SFTP服务器并使用密钥进行身份验证的完整指南。