简短结论先说:SFTP 本身不支持“直接从 A 服务器 SFTP 到 B 服务器”这种跨服务器传输(不像 scp 有 -3 或 rsync 可经由中间机),但你可以通过其他方式实现“跨服务器”效果。
下面分情况说明:
SFTP 是 客户端 ↔ 服务器 的点对点协议:
不能:
服务器A ──SFTP──> 服务器B
SFTP 客户端无法在两条 SFTP 连接之间直接传文件。
你在一台机器上:
sftp userA@serverA
get file
bye
sftp userB@serverB
put file
bye
或用 lftp:
lftp sftp://userA@serverA -e "get file; quit"
lftp sftp://userB@serverB -e "put file; quit"
如果两台服务器都开了 SSH:
ssh userA@serverA "tar czf - /data" | ssh userB@serverB "tar xzf - -C /data"
或单文件:
ssh userA@serverA "cat /path/file" | ssh userB@serverB "cat > /path/file"
如果你只是“跨服务器传文件”,其实更合适:
scp userA@serverA:/path/file userB@serverB:/path/
或经本地(-3):
scp -3 userA@serverA:/file userB@serverB:/file
rsync -avz userA@serverA:/dir/ userB@serverB:/dir/
如果你能登录中间服务器:
ssh jumphost
sftp userA@serverA
sftp userB@serverB
或从跳板机直接:
scp userA@serverA:/file userB@serverB:/file
sshfs userA@serverA:/mnt/a
sshfs userB@serverB:/mnt/b
cp /mnt/a/file /mnt/b/
这种情况下只能:
本地 ← SFTP → A 本地 ← SFTP → B
✅ SFTP 不能服务器之间直接传
✅ 可以通过 本地中转 / SSH / scp / rsync 实现跨服务器
✅ 如果只是为了传文件,scp / rsync 通常比 SFTP 更合适
如果你能说一下:
我可以给你一个最合适的具体命令方案。