如何从远程Linux云服务器向本地客户端传输文件?
从远程Linux云服务器传输文件到本地的可行方案
一、SCP命令(最通用的原生方案)
本地终端直接执行,无需额外安装工具(只要本地和远程服务器都开启SSH服务):
- 单个文件传输:
scp 远程用户名@远程服务器IP:/远程文件绝对路径 /本地保存路径 - 整个目录递归传输:
scp -r 远程用户名@远程服务器IP:/远程目录绝对路径 /本地保存路径
如果远程SSH端口不是默认的22,加-P参数指定端口:
scp -P 自定义端口号 远程用户名@远程服务器IP:/远程文件路径 /本地路径
二、Rsync(高效增量传输首选)
适合大文件、重复传输场景,支持断点续传,传输效率比SCP更高:
- 单个文件传输:
rsync -avz 远程用户名@远程服务器IP:/远程文件路径 /本地路径 - 目录传输:
rsync -avz 远程用户名@远程服务器IP:/远程目录路径/ /本地目标目录/
参数说明:
-a:归档模式,保留文件权限、时间戳等元数据-v:显示详细传输日志-z:传输时压缩数据,节省带宽- 非默认端口需指定SSH参数:
rsync -avz -e 'ssh -p 自定义端口号' 远程用户名@远程服务器IP:/远程文件路径 /本地路径
三、SFTP命令行(交互式操作)
适合需要先浏览远程文件系统,再选择文件传输的场景:
- 连接远程服务器:
非默认端口:sftp 远程用户名@远程服务器IPsftp -P 自定义端口号 远程用户名@远程服务器IP - 下载单个文件到本地:
get /远程文件绝对路径 /本地保存路径 - 下载整个目录(加
-r参数):get -r /远程目录绝对路径 /本地保存路径 - 退出SFTP会话:
exit
四、Python代码方案(绕开paramiko限制)
如果需要用代码实现,直接通过subprocess调用系统原生的scp/rsync命令,避免paramiko的功能局限:
import subprocess # 单个文件传输示例 remote_path = "远程用户名@远程服务器IP:/远程文件路径" local_path = "/本地保存路径" ssh_port = 22 # 构建scp命令 transfer_cmd = ["scp", "-P", str(ssh_port), remote_path, local_path] # 执行命令,check=True会在命令失败时抛出异常 subprocess.run(transfer_cmd, check=True) # 目录传输只需加-r参数 dir_transfer_cmd = ["scp", "-r", "-P", str(ssh_port), "远程用户名@远程服务器IP:/远程目录路径", local_path] subprocess.run(dir_transfer_cmd, check=True)
内容的提问来源于stack exchange,提问作者XxVoltage _
相关产品推荐
相关产品推荐

