麦克斯仇
Think different
159
文章
29507
阅读
首页
INDEX
文章
ARTICLE
关于
ABOUT
Linux系统中scp远程文件传输
创建日期:
2020/07/18
修改日期:
2023/05/19
Linux
参考文档:[https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/scp.html](https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/scp.html) ### 1. 常用参数 ```bash scp [参数] [原路径] [目标路径] scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2 ``` > 仅介绍常用参数(够用就行),其他参数请查看参考文档 | 参数 | 含义 | | - | - | | -C | 允许压缩(将-C标志传递给ssh,从而打开压缩功能) | | -p | 留原文件的修改时间,访问时间和访问权限 | | -q | 不显示传输进度条 | | -r | 递归复制整个目录(传输文件夹时使用) | | -i identity_file | 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh | | -l limit | 限定用户所能使用的带宽,以Kbit/s为单位 | | -P port | 指定数据传输用到的端口号,默认端口22 | ### 2. 使用说明 1. 命令执行后若第一次连接对方服务器,则提示`Are you sure you want to continue connecting`,输入`yes`回车即可 2. 接下来需要输入密码,若配置了ssh免密登录或者`-i identity_file`指定了密钥文件,则无需输入密码 3. 若不写`remote_username@`,则默认使用`root@`,即`root`用户 #### 2.1 复制文件 ```bash # 本地文件复制到远程文件 scp local_file remote_username@remote_ip:remote_file # 本地文件复制到远程文件夹下 scp local_file remote_username@remote_ip:remote_folder # 复制多个文件到远程文件夹下 scp local_file1 local_file2 remote_username@remote_ip:remote_folder # 远程文件复制到本地文件 scp remote_username@remote_ip:remote_file local_file # 远程文件复制到本地文件夹下 scp remote_username@remote_ip:remote_file local_folder ``` #### 2.2 复制目录 ```bash # 本地文件夹复制到远程文件夹下 scp -r local_folder remote_username@remote_ip:remote_folder # 远程文件夹复制到本地文件夹下 scp -r remote_username@remote_ip:remote_folder local_folder ``` ### 3. 示例 > 若连接远程时使用非root用户,则需要在IP前指定用户名,如:`user@192.168.220.130` ```bash # 将本地 test.txt 复制到远程 /root/ 目录下 scp test.txt 192.168.220.130:/root/ # 将本地 test.txt 复制到远程 /root/ 目录下,文件命名为 123.txt scp test.txt 192.168.220.130:/root/123.txt # 从远程下载 123.txt 保存在当前目录下,文件命名为 456.txt scp 192.168.220.130:/root/123.txt 456.txt # 将本地的 testFolder 文件夹递归复制到远程 /root/ 目录下 scp -r testFolder/ 192.168.220.130:/root/ # 将本地的 testFolder 文件夹递归复制到远程 /root/ 目录下,并将文件夹命名为 123 scp -r testFolder/ 192.168.220.130:/root/123 # 从远程递归下载 testFolder 到当前目录下 scp -r 192.168.220.130:/root/testFolder ./ # 从远程递归下载 testFolder 到当前目录下,并将文件夹命名为 aaa scp -r 192.168.220.130:/root/testFolder aaa # 使用指定端口(即远程服务端ssh打开的端口) scp -P 22222 testFolder 192.168.220.131:/root/ # 开启压缩 scp -C testFolder 192.168.220.131:/root/ # 文件保留文件时间权限等 scp -p testFolder 192.168.220.131:/root/ # 静默传输,不显示进度条 scp -q testFolder 192.168.220.131:/root/ # 指定ssh连接远程时使用的密钥文件,ssh默认使用.ssh/id_rsa文件 scp -i .ssh/id_rsa 192.168.220.131:/root/ # 限速传输 8Kbit/s 即 1KB/s scp -l 8 testFolder 192.168.220.131:/root/ ``` ### 4. 免密传输 1. 建立ssh信任,参照 [Linux ssh免密登录](https://maxqiu.com/article/detail/42) 配置后,scp即可不需要密码 2. expect脚本自动输入密码,参照 [https://www.cnblogs.com/su-root/p/11229316.html](https://www.cnblogs.com/su-root/p/11229316.html)
2
全部评论