python 从远程服务器中获取文件到本地

本文介绍如何利用Python的Paramiko库实现SSH连接,并通过SFTP协议完成远程服务器与本地之间的文件传输。提供了完整的示例代码,展示了如何建立连接、进行文件传输以及关闭连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


通过paramiko库来实现,基本代码如下


host_ip='***' #不需要带端口

username='***' 
password='***'
remote_path='***'
local_path='***'


def remote_scp(host_ip,remote_path,local_path,username,password):
  t = paramiko.Transport((host_ip,22))
  t.connect(username=username, password=password) # 登录远程服务器
  sftp = paramiko.SFTPClient.from_transport(t)  # sftp传输协议
  src = remote_path
  des = local_path
  sftp.get(src,des)
  t.close()
  
Python中,连接远程服务器并下载文件本地是一个常见的需求。这个过程涉及到了解网络协议、选择合适的库以及正确的异常处理等方面的知识。下面我会详细介绍其中的关键步骤和技术要点,并提供一个完整的示例帮助您更好地理解。 ### 技术要点 #### 1. 确定使用的传输协议 - **FTP**: 文件传输协议是最传统的用于上传和下载文件的方式之一; - **SFTP/SCP over SSH**: 更加安全的选择,特别是在Linux系统之间进行数据交换时更为常见; - **HTTP(S)**: Web应用中最广泛采用的一种方式; #### 2. 选用适合的库 根据所选的传输协议,您可以选择对应的Python库: - FTP -> `ftplib` - SFTP/SSH -> `paramiko`, 或者更高层次封装如 `fabric` / `invoke`. - HTTP(S) -> `requests`. #### 3. 编写健壮的代码结构 编写能够应对各种可能出现的情况(例如:网络波动、权限不足等)是非常重要的。因此,您的代码应包括但不限于以下特性: - 异常捕获与适当反馈信息 - 断点续传支持(针对较大文件) - 设置合理的超时限制 #### 4. 数据完整性和安全性检查 为了保证下载下来的文件与其原始版本一致并且未受到篡改,通常还需要对文件做校验工作(MD5哈希值比较)。同时也要注意保护敏感凭证和个人隐私资料的安全存储及加密通信。 --- 接下来我们以使用 Paramiko 库为例展示如何利用 SSH 协议从远程 Linux 主机获取文件的操作方法。 ```python import paramiko from scp import SCPClient def fetch_remote_file(hostname, port, username, password_or_keypath, remote_filepath, local_filepath): """ Connect to a remote server via SSH and copy files using SCP. :param hostname: The address of the remote machine. :param port: Port number used by ssh service on that host. :param username: Username for logging into the remote system. :param password_or_keypath: Either string containing the user's password or path to private key file. :param remote_filepath: Path where target file resides within the remote filesystem. :param local_filepath: Destination filepath locally after transfer completes successfully. """ try: # 创建SSH客户端实例 client = paramiko.SSHClient() # 自动将未知主机添加进known_hosts列表里(仅限于测试环境) client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 登录远程机器(基于密码认证或公钥认证) if isinstance(password_or_keypath, str) and len(password_or_keypath)>0 : client.connect(hostname=hostname, port=port, username=username,password=password_or_keypath) elif os.path.exists(password_or_keypath): pkey = paramiko.RSAKey.from_private_key_file(password_or_keypath) client.connect(hostname=hostname,port=port,username=username,pkey=pkey) # 初始化scp会话并将远端文件拷贝过来 with SCPClient(client.get_transport()) as scp: scp.get(remote_filepath,local_filepath) print('File downloaded.') except Exception as err: print(f"Failed downloading file due to error:{err}") finally: client.close() if __name__ == '__main__': HOSTNAME="your.server.com" PORT=22 USERNAME="your_username" PASSWORD_OR_KEYPATH="/path/to/private/key/id_rsa" # 可替换为实际密码字符串 REMOTE_FILE_PATH='/remote/directory/filename.ext' LOCAL_SAVE_PATH='./filename.ext' fetch_remote_file(HOSTNAME,PORT,USERNAME,PASSWORD_OR_KEYPATH, REMOTE_FILE_PATH,LOCAL_SAVE_PATH) ``` 在这个脚本中,我们实现了如下几个关键功能: 1. 使用 Paramiko 和其扩展模块 SCPClient 构建了一个简单的命令行工具,允许用户指定远程服务器的信息。 2. 支持通过用户名+密码或者私钥的形式进行身份验证。 3. 成功建立连接后执行了“get”操作把远程路径下的文件复制回本地计算机上。 4. 加入了一些基础性的错误捕捉逻辑确保即使出现问题也能得到相应的提示信息而不是直接崩溃退出程序运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值