📜  python connect sftp with key - Python (1)

📅  最后修改于: 2023-12-03 15:18:54.359000             🧑  作者: Mango

Python连接SFTP服务器并使用密钥进行身份验证

在Python中,我们可以使用paramiko模块来连接SFTP服务器并进行文件传输。 Paramiko是一个纯Python的SSH2协议实现,内含SFTP客户端和服务器端实现。

要连接SFTP服务器并使用密钥进行身份验证,需要以下步骤:

  1. 安装Paramiko模块,可以使用以下命令进行安装:
pip install paramiko
  1. 导入Paramiko模块并连接到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)

在上面的代码中,我们使用paramiko.SSHClient()创建了一个SSH客户端,并使用paramiko.AutoAddPolicy()设置了缺失主机密钥时的策略,然后使用ssh.load_system_host_keys()加载本地的SSH密钥。接着,我们使用ssh.connect()方法连接到SFTP服务器,其中我们传递了主机名,用户名,端口和密钥文件路径。

  1. 使用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服务器并使用密钥进行身份验证的完整指南。