服务器之间文件互传是linux服务器应用中使用比较较频繁的场景。
特别是大文件使用内网地址传输能大大提升传输效率并使对应用的影响降低到最小,scp命令能做到你能想到的一切!
首先了解一下SCP是干什么的,scp的全称是secure copy,是linux中用于远程拷贝文件的命令,和cp有些类似,但它是跨服务器拷贝的并且是加密的,而cp命令只能在本机拷贝。
其使用的具体场景主要包括文件获取和文件上传,假如想从远程服务器上获取某个文件,而远程服务器既没有ftp,又没有开启web下载服务,还没做共享,那么只能用scp来达到目的;反之如果我们想把本机的文件上传到远程服务器上,常规途径无法达到目的的话,scp可以助我们一臂之力!
使用方法主要有四类,
一是从远程服务器获取文件或目录,命令如下:
scp -P 50001 root@X.X.X.X:/test/bak.tar.gz /home/bak.tar.gz
端口参数P必须为大写,该参数不是必须的,如果ssh参数没有修改则不需要该参数,50001为基于安全性考虑修改后的ssh端口。 root@X.X.X.X 表示使用root用户登录远程服务器X.X.X.XIP地址,:/test/bak.tar.gz 表示远程服务器上的文件,/home/bak.tar.gz表示保存在本地上的路径和文件名。
若获取目录,上面命令需要加上参数-r,只不过不需要文件名,如scp -P -r 50001 root@X.X.X.X:/test/ /home/test/
二是将本地目录或文件上传到服务器,命令如下:
scp -P 50001 /home/bak.tar.gz root@X.X.X.X:/test/bak.tar.gz,各命令含义同上,上传目录的命令为scp -P 50001 -r /home/ root@X.X.X.X:/test/
特别的,上述几个命令在执行后必须需要输入目标服务器的root用户密码,若是手动执行虽然麻烦点但仍可达到目的,但是如果使用脚本的话就会存在问题,这就需要在传输文件的两台主机之间建立信任关系,具体操作如下,另外为了减少文件传输后因权限问题导致的访问限制,我直接使用权限更低的用户间建立信任关系而不是超级用户root,具体方法如下:假设A机器代表远程服务器,B机器代表客户端,需要由B向A上传文件或由A向B获取文件,则首先需要在B上执行ssh-keygen命令用于B机器的安全信任证书,
[appuser@test ~]$ ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/appuser/.ssh/id_rsa): 直接回车
Enter passphrase (empty for no passphrase): 直接回车表示没有证书密码
Enter same passphrase again: 直接回车
Your identification has been saved in /home/appuser/.ssh/id_rsa.
Your public key has been saved in /home/appuser/.ssh/id_rsa.pub.
The key fingerprint is:
4e:9a:c7:37:0a:80:92:92:f5:17:fd:ba:41:96:59:b4 appuser@test
[appuser@test ~]$
这样会在appuser的/home/目录下的.ssh子目录中生成私钥证书id_rsa和公钥证书id_rsa.pub。将公钥证书id_rsa.pub上传至A的相同目录下并改名为authorized_keys,如果是有多个客户端需要和A建立信任关系,则需要把id_rsa.pub的内容追加到authorized_keys后面,具体命令如下:
cat /home/appuser/.ssh/id_rsa.pub >> /home/appuser/.ssh/authorized_keys
范例
[appuser@test ~]$ cat /home/appuser/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAtAmAugX/aAs607rejbphYBwIOaRtsr3KGAuWC3xcCYyVMaoErRypAVPUfo5UTyZ/ydRrw4wHdMtB7JyGZQYmu13OY+0= appuser@test
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAmRaUh1XeaKoMoVwj/Y8rlmdumy53T4tCENphC3xcCYyVMaoErRypAVPUfo5UTyZ/ydRrw4wHdMtB7JyGZQYmu13OY+0= appuser@test
[appuser@test ~]$
这个时候由B向A上传文件还是需要密码,所以需要输入密码,这个时候A与B之间就正式建立了信任关系,从B向A进行文件传输或获取的时候就不需要输入密码了,
但这种信任关系是单向的,只能说明A信任了B,但是B仍不信任A,若要B信任A则需要二者身份互换重复上述步骤即可。
- 上一篇: 数据备份实战
- 下一篇: 阿里RDS高可用性的保障原理
评论
itker
回复chmod 600 ./.ssh/authorized_keys
chmod 700 .ssh