scp使用方法
-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-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是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
4.使用实例:
scp命令的实际应用概述:
从本地服务器复制到远程服务器:
(1) 复制文件:
命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名
(2) 复制目录:
命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
两台服务器都要安装scp才能传文件
yum install openssh-clients* 不是yum scp 啊
1、获取远程服务器上的文件
scp -P 2222 root@www.vpser.net:/root/lnmp0.4.tar.gz /home/lnmp0.4.tar.gz
上端口大写P 为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。 root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net,:/root/lnmp0.4.tar.gz 表示远程服务器上的文件,最后面的/home/lnmp0.4.tar.gz表示保存在本地上的路径和文件名。
2、获取远程服务器上的目录
scp -P 2222 -r root@www.vpser.net:/root/lnmp0.4/ /home/lnmp0.4/
上端口大写P 为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。-r 参数表示递归复制(即复制该目录下面的文件和目录);root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net,:/root/lnmp0.4/ 表示远程服务器上的目录,最后面的/home/lnmp0.4/表示保存在本地上的路径。
3、将本地文件上传到服务器上
scp -P 2222 /home/lnmp0.4.tar.gz root@www.vpser.net:/root/lnmp0.4.tar.gz
上端口大写P 为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。 /home/lnmp0.4.tar.gz表示本地上准备上传文件的路径和文件名。root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net,:/root/lnmp0.4.tar.gz 表示保存在远程服务器上目录和文件名。
4、将本地目录上传到服务器上
scp -P 2222 -r /home/lnmp0.4/ root@www.vpser.net:/root/lnmp0.4/
上 端口大写P 为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。-r 参数表示递归复制(即复制该目录下面的文件和目录);/home/lnmp0.4/表示准备要上传的目录,root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net,:/root/lnmp0.4/ 表示保存在远程服务器上的目录位置。
再说说wget:
wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径
例如: # wget http://www.xxx.org/xxxx/xxx.tar.gz
简单说一下 -c 参数,这个也常用,可以断点续传, 如果不小心终止了,可以继续使用命令接着下载。
例如: # wget -c http://www.xxx.org/xxxx/xxx.tar.gz
SCP命令的基本语法 v p P C r l q
- scp source_file_name username@destination_host:destination_folder
SCP命令有很多可以使用的参数,这里指的是每次都会用到的参数。
用-v参数来提供SCP进程的详细信息
不带参数的基本SCP命令会在后台拷贝文件,除非操作完成或者有错误出现,否则用户在界面上是看不到任何提示信息的。你可以用“-v”参数来在屏幕上打印出调试信息,这能帮助你调试连接、认证和配置的一些问题。
- pungki@mint ~/Documents $ scp -v Label.pdf mrarianto@202.x.x.x:.
部分输出
- Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -t .
- OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
- debug1: Reading configuration data /etc/ssh/ssh_config
- debug1: /etc/ssh/ssh_config line 19: Applying options for *
- debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
- debug1: Connection established.
- debug1: Host '202.x.x.x' is known and matches the RSA host key.
- debug1: Found key in /home/pungki/.ssh/known_hosts:1
- debug1: ssh_rsa_verify: signature correct
- debug1: Next authentication method: password
- mrarianto@202.x.x.x's password:
- debug1: Authentication succeeded (password).
- Authenticated to 202.x.x.x ([202.x.x.x]:22).
- Sending file modes: C0770 3760348 Label.pdf
- Sink: C0770 3760348 Label.pdf
- Label.pdf 100% 3672KB 136.0KB/s 00:27
- Transferred: sent 3766304, received 3000 bytes, in 65.2 seconds
- Bytes per second: sent 57766.4, received 46.0
- debug1: Exit status 0
从源文件获取修改时间、访问时间和模式
“-p”参数会帮到把预计的时间和连接速度会显示在屏幕上。
- pungki@mint ~/Documents $ scp -p Label.pdf mrarianto@202.x.x.x:.
部分输出
- mrarianto@202.x.x.x's password:
- Label.pdf 100% 3672KB 126.6KB/s 00:29
用-C参数来让文件传输更快
有一个参数能让传输文件更快,就是“-C”参数,它的作用是不停压缩所传输的文件。它特别之处在于压缩是在网络传输中进行,当文件传到目标服务器时,它会变回压缩之前的原始大小。
来看看这些命令,我们使用一个93 Mb的单一文件来做例子。
- pungki@mint ~/Documents $ scp -pv messages.log mrarianto@202.x.x.x:.
部分输出
- Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
- OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
- debug1: Reading configuration data /etc/ssh/ssh_config
- debug1: /etc/ssh/ssh_config line 19: Applying options for *
- debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
- debug1: Connection established.
- debug1: identity file /home/pungki/.ssh/id_rsa type -1
- debug1: Found key in /home/pungki/.ssh/known_hosts:1
- debug1: ssh_rsa_verify: signature correct
- debug1: Trying private key: /home/pungki/.ssh/id_rsa
- debug1: Next authentication method: password
- mrarianto@202.x.x.x's password:
- debug1: Authentication succeeded (password).
- Authenticated to 202.x.x.x ([202.x.x.x]:22).
- debug1: Sending command: scp -v -p -t .
- File mtime 1323853868 atime 1380425711
- Sending file timestamps: T1323853868 0 1380425711 0
- messages.log 100% 93MB 58.6KB/s 27:05
- Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds
- Bytes per second: sent 58758.4, received 15.6
- debug1: Exit status 0
不用“-C”参数来拷贝文件,结果用了1661.3秒,你可以比较下用了“-C”参数之后的结果。
- pungki@mint ~/Documents $ scp -Cpv messages.log mrarianto@202.x.x.x:.
部分输出
- Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
- OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
- debug1: Reading configuration data /etc/ssh/ssh_config
- debug1: /etc/ssh/ssh_config line 19: Applying options for *
- debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
- debug1: Connection established.
- debug1: identity file /home/pungki/.ssh/id_rsa type -1
- debug1: Host '202.x.x.x' is known and matches the RSA host key.
- debug1: Found key in /home/pungki/.ssh/known_hosts:1
- debug1: ssh_rsa_verify: signature correct
- debug1: Next authentication method: publickey
- debug1: Trying private key: /home/pungki/.ssh/id_rsa
- debug1: Next authentication method: password
- mrarianto@202.x.x.x's password:
- debug1: Enabling compression at level 6.
- debug1: Authentication succeeded (password).
- Authenticated to 202.x.x.x ([202.x.x.x]:22).
- debug1: channel 0: new [client-session]
- debug1: Sending command: scp -v -p -t .
- File mtime 1323853868 atime 1380428748
- Sending file timestamps: T1323853868 0 1380428748 0
- Sink: T1323853868 0 1380428748 0
- Sending file modes: C0600 97517300 messages.log
- messages.log 100% 93MB 602.7KB/s 02:38
- Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds
- Bytes per second: sent 54813.9, received 97.0
- debug1: Exit status 0
- debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09
- debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48
看到了吧,压缩了文件之后,传输过程在162.5秒内就完成了,速度是不用“-C”参数的10倍。如果你要通过网络拷贝很多份文件,那么“-C”参数能帮你节省掉很多时间。
有一点我们需要注意,这个压缩的方法不是适用于所有文件。当源文件已经被压缩过了,那就没办法再压缩很多了。诸如那些像.zip,.rar,pictures和.iso的文件,用“-C”参数就没什么意义。
选择其它加密算法来加密文件
SCP默认是用“AES-128”加密算法来加密传输的。如果你想要改用其它加密算法来加密传输,你可以用“-c”参数。我们来瞧瞧。
- pungki@mint ~/Documents $ scp -c 3des Label.pdf mrarianto@202.x.x.x:.
- mrarianto@202.x.x.x's password:
- Label.pdf 100% 3672KB 282.5KB/s 00:13
上述命令是告诉SCP用3des algorithm来加密文件。要注意这个参数是“-c”(小写)而不是“-C“(大写)。
限制带宽使用
还有一个很有用的参数是“-l”参数,它能限制使用带宽。如果你为了拷贝很多文件而去执行了一份自动化脚本又不希望带宽被SCP进程耗尽,那这个参数会非常管用。
- pungki@mint ~/Documents $ scp -l 400 Label.pdf mrarianto@202.x.x.x:.
- mrarianto@202.x.x.x's password:
- Label.pdf 100% 3672KB 50.3KB/s 01:13
在“-l”参数后面的这个400值意思是我们给SCP进程限制了带宽为50 KB/秒。有一点要记住,带宽是以千比特/秒 (kbps)表示的,而8 比特等于1 字节。
因为SCP是用千字节/秒 (KB/s)计算的,所以如果你想要限制SCP的最大带宽只有50 KB/s,你就需要设置成50 x 8 = 400。
指定端口
通常SCP是把22作为默认端口。但是为了安全起见SSH 监听端口改成其它端口。比如说,我们想用2249端口,这种情况下就要指定端口。命令如下所示。
- pungki@mint ~/Documents $ scp -P 2249 Label.pdf mrarianto@202.x.x.x:.
- mrarianto@202.x.x.x's password:
- Label.pdf 100% 3672KB 262.3KB/s 00:14
确认一下写的是大写字母“P”而不是“p“,因为“p”已经被用来保留源文件的修改时间和模式(LCTT 译注:和 ssh 命令不同了)。
递归拷贝文件和文件夹
有时我们需要拷贝文件夹及其内部的所有文件/子文件夹,我们如果能用一条命令解决问题那就更好了。SCP用“-r”参数就能做到。
- pungki@mint ~/Documents $ scp -r documents mrarianto@202.x.x.x:.
- mrarianto@202.x.x.x's password:
- Label.pdf 100% 3672KB 282.5KB/s 00:13
- scp.txt 100% 10KB 9.8KB/s 00:00
拷贝完成后,你会在目标服务器中找到一个名为“documents”的文件夹,其中就是所拷贝的所有文件。“documents”是系统自动创建的文件夹。
禁用进度条和警告/诊断信息
如果你不想从SCP中看到进度条和警告/诊断信息,你可以用“-q”参数来静默它们,举例如下。
- pungki@mint ~/Documents $ scp -q Label.pdf mrarianto@202.x.x.x:.
- mrarianto@202.x.x.x's password:
- pungki@mint ~/Documents $
正如你所看到的,在你输入密码之后,没有任何关于SCP进度的消息反馈。进度完成后,你也看不到任何提示。
用SCP通过代理来拷贝文件
代理服务器经常用于办公环境,SCP自然是没有经过代理方面的配置的。当你的环境正在使用代理,那么你就必须要“告诉”SCP与代理关联起来。
场景如下:代理的地址是10.0.96.6,端口是8080。该代理还实现了用户认证功能。首先,你需要创建一个“~/.ssh/config”文件,其次把以下命令输入进该文件。
- ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
接着你需要创建一个同样包括以下命令的“~/.ssh/proxyauth”文件。
- myusername:mypassword
然后你就可以像往常一样使用SCP了。
请注意corkscrew可能还没有安装在你的系统中。在我的Linux Mint中,我需要首先先用标准Linux Mint安装程序来安装它。
- $ apt-get install corkscrew
对于其它的一些基于yum安装的系统,用户能用以下的命令来安装corkscrew。
- # yum install corkscrew
还有一点就是因为“~/.ssh/proxyauth”文件中以明文的格式包含了你的“用户名”和“密码”,所以请确保该文件只能你来查看。
选择不同的ssh_config文件
对于经常在公司网络和公共网络之间切换的移动用户来说,一直改变SCP的设置显然是很痛苦的。如果我们能放一个保存不同配置的ssh_config文件来匹配我们的需求那就很好了。
以下是一个简单的场景
代理是被用来在公司网络但不是公共网络并且你会定期切换网络时候使用的。
- pungki@mint ~/Documents $ scp -F /home/pungki/proxy_ssh_config Label.pdf
- mrarianto@202.x.x.x:.
- mrarianto@202.x.x.x's password:
- Label.pdf 100% 3672KB 282.5KB/s 00:13
默认情况下每个用户会把“ssh_config”文件放在“~/.ssh/config“路径下。用兼容的代理创建一个特定的“ssh_config”文件,能让你切换网络时更加方便容易。
当你处于公司网络时,你可以用“-F”参数,当你处于公共网络时,你可以忽略掉“-F”参数。
以上就是关于SCP的全部内容了,你可以查看SCP的man页面来获取更多内容,请随意留下您的评论及建议。