路漫漫其修远兮
吾将上下而求索

linux远程复制:scp命令

1、简介

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。

2、命令格式

scp [参数] [原路径] [目标路径]

3、命令参数

-1  强制scp命令使用协议ssh1  
-2  强制scp命令使用协议ssh2  
-4  强制scp命令只使用IPv4寻址  
-6  强制scp命令只使用IPv6寻址  
-C  允许压缩。(将-C标志传递给ssh,从而打开压缩功能) 
-p  保留原文件的修改时间,访问时间和访问权限
-q  不显示传输进度条
-r  递归复制整个目录
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题
-c cipher  以cipher将数据传输进行加密,这个选项将直接传递给ssh
-F ssh_config  指定一个替代的ssh配置文件,此参数直接传递给ssh
-i identity_file  从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh
-l limit  限定用户所能使用的带宽,以Kbit/s为单位
-o ssh_option  如果习惯于使用ssh_config(5)中的参数传递方式
-P port  注意是大写的P, port是指定数据传输用到的端口号

常用参数

文件大小 传输速度 -l参数 时间
100G 5MB/s 40960 340min
100G 10MB/s 81920 170min
100G 20MB/s 163840 85min
100G 50MB/s 409600 34min

4、使用实例

从本地服务器复制到远程服务器: 

1、复制文件,指定了远程的目录,将文件复制到该目录下面

scp local_file remote_username@remote_ip:remote_folder

2、复制文件,并将源文件名修改为目标文件名

scp local_file remote_username@remote_ip:remote_file

3、复制文件,没有指定用户名,scp会根据本机当前用户来选择远端相同的用户来进行复制,这里和ssh的登录用法是一样的

scp local_file remote_ip:remote_folder  
例如:[bob@localhost ~]$scp abc.tar.gz 192.168.175.12:/tmp   则要求要输入远程主机上bob用户的密码

4、复制目录,要加上:-r选项,如果要保留原来文件的属性,要加上:-p选项

scp -r local_folder remote_username@remote_ip:remote_folder

从远程服务器复制到本地服务器: 

从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了,注意后面的参数一直是复制的目标地址

1、从远处复制文件到本地目录

scp root@192.168.175.12:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/

5、注意事项

1、如果感觉每次都要输入密码,很繁琐,可以采用秘钥认证的方式进行,这里不再赘述

2、如果scp远端主机已经有相同名字的文件,则scp新复制的文件会覆盖原来的文件内容

3、如果目标主机已经禁止了root登录,则scp命令复制到远端主机root用户会失败,因为scp实际依赖ssh的。但是复制到远程主机其他用户则可以正常工作

4、scp命令传送文件到远端的机器,最好在远端机器建立一个专门用于传输文件的普通用户scpuser,将本机的root下面的公钥添加到远端主机scpuser用户下的认证文件里面,这样安全些。

而不是为了方便,将本机的root下面的公钥添加到远端主机root用户下的认证文件里面,这样很危险。

假使本机因漏洞被攻破,如果远端主机使用的是root用户,将本机的root的公钥添加的远端主机的root目录下,则本机可以通过ssh无密码登录到远端root账户随意进行操作

如果使用scpuser普通用户,则如果本机被攻击,即使登录到远端主机scpuser用户,在远端服务器可操作的范围就很小,不会危害整个系统,也就可以ssh禁止root登录来保证安全。

scp -P9777 uid_records.tgz scpuser@192.168.175.12:/hadoop/uid_records/

如果目录里面有软链,通过scp复制这个目录的时候会将软链对应的文件复制过去,而不是软链本身,如果想要将软链复制过去,将此目录打包为一个文件复制过去然后解压即可

未经允许不得转载:江哥架构师笔记 » linux远程复制:scp命令

分享到:更多 ()

评论 抢沙发

评论前必须登录!