SSH(Secure Shell)是一种加密的网络协议,常用于远程登录和管理服务器,同时也支持文件传输功能,通过SSH命令下载文件,用户可以在本地计算机与远程服务器之间安全地传输数据,避免数据在传输过程中被窃取或篡改,本文将详细介绍如何使用SSH命令下载文件,包括基本语法、常用参数、不同场景下的应用方法以及注意事项。

SSH命令下载文件的基本语法
SSH命令下载文件通常通过scp(Secure Copy)工具实现,它是SSH协议的一部分,专门用于安全地复制文件和目录。scp的基本语法如下:
scp [选项] [用户名@]远程主机:远程文件路径 本地目标路径
[选项]:用于指定scp的行为,如-r(递归复制目录)、-P(指定端口号)、-p(保留文件修改时间等属性)等。[用户名@]远程主机:远程服务器的用户名和主机名或IP地址,若省略用户名,则默认使用当前本地用户名。远程文件路径:远程服务器上需要下载的文件或目录的路径。本地目标路径:文件下载到本地后的保存路径,若省略,则默认保存在当前目录。
从远程服务器168.1.100的用户root下载文件/home/test.txt到本地当前目录,命令为:
scp root@192.168.1.100:/home/test.txt .
常用参数及其作用
scp命令提供了多个参数,以满足不同的传输需求,以下是常用参数的说明:
| 参数 | 作用 | 示例 |
|---|---|---|
-r |
递归复制整个目录,用于下载文件夹 | scp -r user@host:/path/to/dir /local/path |
-P |
指定SSH端口号,默认为22 | scp -P 2222 user@host:/file.txt /local/path |
-p |
保留文件的修改时间、访问时间和权限 | scp -p user@host:/file.txt /local/path |
-C |
启用压缩,适用于传输大文件或慢速网络 | scp -C user@host:/file.txt /local/path |
-l |
限制传输速率(单位:Kbit/s) | scp -l 1024 user@host:/file.txt /local/path |
-v |
详细模式,显示调试信息,便于排查问题 | scp -v user@host:/file.txt /local/path |
使用压缩功能下载大文件:

scp -C user@192.168.1.100:/large_file.zip /local/downloads/
不同场景下的应用方法
下载单个文件
从远程服务器下载单个文件是最常见的场景,假设远程服务器IP为168.1.100,用户为ubuntu,文件路径为/home/ubuntu/data.txt,下载到本地/home/user/目录:
scp ubuntu@192.168.1.100:/home/ubuntu/data.txt /home/user/
下载整个目录
若需下载远程服务器上的整个目录,需使用-r参数,下载/var/www/html目录到本地/home/user/backup:
scp -r ubuntu@192.168.1.100:/var/www/html /home/user/backup
通过非默认端口下载
如果远程服务器的SSH端口不是默认的22,需使用-P参数指定端口号,通过端口2222下载文件:
scp -P 2222 ubuntu@192.168.1.100:/home/ubuntu/config.conf /home/user/
使用SSH密钥认证下载文件
为避免每次输入密码,可通过SSH密钥认证实现自动化下载,首先确保本地已生成SSH密对,并将公钥添加到远程服务器的~/.ssh/authorized_keys文件中,之后下载文件无需输入密码:

scp -i ~/.ssh/private_key user@host:/file.txt /local/path
下载文件并重命名
下载文件时可直接在本地目标路径中指定新名称,将远程remote.txt下载为local_copy.txt:
scp user@host:/remote.txt /local/path/local_copy.txt
注意事项
- 权限问题:确保本地用户对目标路径有写入权限,远程用户对源文件有读取权限。
- 网络稳定性:大文件传输时,网络不稳定可能导致传输中断,可使用
rsync替代scp支持断点续传。 - 防火墙设置:确保本地和远程服务器的防火墙允许SSH端口(默认22或自定义端口)的通信。
- 路径格式:远程路径使用分隔,避免Windows路径格式(
\)导致的错误。 - 文件覆盖:
scp会直接覆盖同名文件,建议先检查本地路径是否已存在同名文件。
相关问答FAQs
问题1:使用scp下载文件时提示“Permission denied”,如何解决?
解答:此错误通常由权限不足引起,可尝试以下方法:
- 确认远程文件对当前用户可读:
ls -l /path/to/file,检查权限是否包含r。 - 若远程用户为
root,需确认是否允许root登录(修改/etc/ssh/sshd_config中的PermitRootLogin)。 - 检查本地目标路径的写权限:
ls -ld /local/path,确保当前用户有w权限。
问题2:如何通过SSH隧道使用scp下载文件?
解答:若需通过中间服务器(跳板机)访问目标服务器,可使用SSH隧道,通过跳板机jump_host下载目标服务器target_host的文件:
scp -o ProxyCommand="ssh -W %h:%p user@jump_host" user@target_host:/file.txt /local/path
此命令通过jump_host建立隧道,再连接target_host完成文件下载。
