用 SFTP 从服务器下载到本地:命令速查
SFTP 有两种常见用法:交互式(登录后用命令行操作)和非交互式(脚本/一行命令批量执行)。下面给出最实用的命令和示例。
快速示例(最常用)
# 连接服务器(默认端口 22)
sftp user@server.example.com
# 如果端口不是 22
sftp -P 2222 user@server.example.com
# 指定私钥
sftp -i ~/.ssh/id_rsa user@server.example.com
进入 sftp 提示符后:
# 查看远程/本地目录
sftp> pwd
sftp> lpwd
# 切换远程/本地目录
sftp> cd /remote/path
sftp> lcd /local/save/path
# 下载单个文件到当前本地目录
sftp> get file.txt
# 下载到指定本地路径(带文件名)
sftp> get /remote/path/file.txt /local/save/path/file.txt
# 递归下载目录
sftp> get -r dir_name
# 批量下载(通配符)
sftp> mget *.log
# 断点续传(续传到已存在的同名本地文件)
sftp> reget bigfile.iso
# 退出
sftp> bye
非交互式(脚本/一条命令执行)
适合自动化或一次性批量下载:
- 使用批处理文件:
# batch.txt 的内容
lcd /local/save/path
cd /remote/path
get -r reports
mget *.log
bye
执行:
sftp -P 2222 -i ~/.ssh/id_rsa -b batch.txt user@server.example.com
- 用“这里文档”一条命令完成:
sftp -P 2222 user@server.example.com <<'EOF'
lcd /local/save/path
cd /remote/path
get data.csv
bye
EOF
常用命令与参数速记
-
连接
- sftp user@host:连接
- -P <port>:端口(大写 P)
- -i <identity_file>:指定私钥
- 其他 SSH 选项可用 -o 传入,如 -o StrictHostKeyChecking=no
-
下载
- get <remote> [local]:下载单个文件
- get -r <remote_dir>:递归下载目录
- mget <pattern>:按通配符批量下载(如 mget *.log)
- reget <remote> [local]:断点续传(从已存在的本地文件大小处续传)
- get -p …:保留时间戳/权限(preserve attributes)
- 提示:不需要先 cd,也可直接用完整路径:get /remote/a/b.txt /local/c/b.txt
-
本地与远程目录
- pwd / lpwd:显示远程/本地当前目录
- cd / lcd:切换远程/本地目录
- ls / lls:列出远程/本地文件
-
退出
- bye 或 quit
小贴士
-
如果只是单次拷贝,scp 会更简洁(但你问题是 sftp,这里仅作对比):
scp -P 2222 user@server:/remote/path/file.txt /local/save/path/
-
权限/端口问题
- 连接失败先检查端口、防火墙以及账号权限。
- 首次连接提示“fingerprint/host key”,确认后会写入 ~/.ssh/known_hosts。
-
Windows
- Windows 10+ 自带 OpenSSH 客户端,PowerShell/命令行里直接用同样的 sftp 命令。
- 如果用 PuTTY 套件,可用 psftp,命令基本一致(open user@host → get …)。






