Linux 远程文件复制传输-----scp/rsync/sftp

时间:2025-02-14 09:55:24

scp(Secure Copy Protocol)是基于 SSH 的安全文件传输工具,可用于在本地和远程计算机之间复制文件或目录。


1. scp(基于 SSH 复制文件)

a. 复制文件到远程

  • 从本地复制到远程

    scp localfile.txt user@remote_host:/remote/path/
    

    ???? 解释:将本地文件 localfile.txt 复制到远程主机 remote_host 的 /remote/path/ 目录下。

  • 从远程复制到本地

    scp user@remote_host:/remote/path/file.txt /local/path/
    

    ???? 解释:将远程主机上的 file.txt 下载到本地 /local/path/ 目录下。

  • 复制整个目录(-r 递归)

    scp -r localdir user@remote_host:/remote/path/
    

    ???? 解释:将本地目录 localdir 及其内容递归复制到远程 remote_host 的 /remote/path/ 目录。

b. 下载远程文件到本地

scp user@remote_host:/remote/path/file.zip /local/path/

???? 示例:从远程服务器 192.168.1.100 下载 file.zip 到本地 /home/user/ 目录:

scp user@192.168.1.100:/home/user/file.zip /home/user/

c. 下载远程目录

scp -r user@remote_host:/remote/path/ /local/path/

???? 示例:下载整个 backup 目录:

scp -r user@192.168.1.100:/home/user/backup/ /home/user/

d. 指定 SSH 端口

如果 SSH 端口不是默认的 22,可以使用 -P 选项:

scp -P 2222 user@remote_host:/remote/path/file.zip /local/path/

2. rsync(更高效的文件同步,支持断点续传)

a. 下载远程文件到本地

rsync -avP user@remote_host:/remote/path/file.zip /local/path/

???? 示例:从 192.168.1.100 下载 file.zip

rsync -avP user@192.168.1.100:/home/user/file.zip /home/user/

b. 下载远程目录

rsync -avP user@remote_host:/remote/path/ /local/path/

???? 示例:下载整个 backup 目录:

rsync -avP user@192.168.1.100:/home/user/backup/ /home/user/

c. 指定 SSH 端口

rsync -avP -e "ssh -p 2222" user@remote_host:/remote/path/ /local/path/

3. 使用 sftp(交互式下载)

如果你需要交互式浏览远程文件再下载,可以使用 sftp

sftp user@remote_host

然后在 sftp> 提示符下执行:

get /remote/path/file.zip

下载整个目录:

get -r /remote/path/

4. 使用密钥文件进行认证

scp -i ~/.ssh/id_rsa localfile.txt user@remote_host:/remote/path/

???? 解释:使用 ~/.ssh/id_rsa 作为身份认证密钥。


5. 多文件复制

scp file1.txt file2.txt user@remote_host:/remote/path/

???? 解释:同时复制多个文件到远程服务器。


总结

方式 适用场景 命令示例
scp 直接复制文件 scp user@remote:/file.zip /local/
scp -r 复制整个目录 scp -r user@remote:/dir/ /local/
rsync 高效同步(支持断点续传) rsync -avP user@remote:/file.zip /local/
rsync -r 同步整个目录 rsync -avP user@remote:/dir/ /local/
sftp 交互式文件下载 sftp user@remote

你是要下载单个文件,还是整个目录?是否需要断点续传?

注意事项

  1. 远程路径必须有写入权限,否则会报错 Permission denied
  2. scp 需要 SSH 访问权限,请确保可以 ssh user@remote_host 登录远程服务器。
  3. 如果连接失败,请检查 SSH 端口和防火墙设置。
  4. 如果传输大文件或不稳定的网络环境,建议使用 rsync 替代 scp,支持断点续传:
    rsync -avP localfile.txt user@remote_host:/remote/path/