Linux 下的 SCP 无密码拷贝文件

2016-12-10 13:05:31 +08:00
 hellojammy

点击访问原文 您还可以加入全栈技术交流群( QQ 群号: 254842154 )


今天给大家介绍一种在 Linux 服务器之间自动拷贝文件的方法。主要使用了基于 ssh 的并且安全的文件 copy 技术—— scp 。这种方法安全并且便捷,无需输入登录密码

我们先设定一下场景和需求:每天凌晨 4 点 30 分,服务器 A 的文件自动同步到服务器 B 。我们可以认为服务器 A 是服务端,服务器 B 是客户端。下面演示如何达到这个目标。

①在客户端(服务器 B )生成一对公钥和秘钥。使用 ssh-keygen -t rsa生成,一路回车即可;

②进入秘钥文件夹查看文件。其中id_rsa.pub是公钥,id_rsa是私钥;

//进入文件夹
cd ~/.ssh

③打开id_rsa.pub文件,并把它的内容拷贝到服务端(服务器 A )的 authorized_keys 文件中;

④在客户端(服务器 B )编写文件拷贝的脚本;

#!/bin/sh
#copy data from remote server. you should copy your client's id_rsa.pub content to the server's ~/.ssh/authorized_keys file
#this script run at client

scp -r root@x.xx.xxx.xxxx:/var/www/html/hellojammy/* /var/www/html/hellojammy/

exit 0;

其中,x.xx.xxx.xxxx是服务端(服务器 A )的 ip 地址。这段脚本的作用是拷贝服务器 B 的/var/www/html/hellojammy/目录下的所有文件(包括子文件夹下的文件),到服务器 A 的/var/www/html/hellojammy/目录。脚本文件为 scp_test.sh

⑤在客户端(服务器 B )编写定时任务脚本,执行文件拷贝的命令。

//编辑定时任务
crontab -e
//添加定时任务
30 4 * * * /bin/sh /data/script/scp_test.sh > /data/script/logs/scp_test.log 2>&1

至此,完成!

4947 次点击
所在节点    Linux
35 条回复
wizardoz
2016-12-10 13:42:08 +08:00
③打开 id_rsa.pub 文件,并把它的内容拷贝到服务端(服务器 A )的 authorized_keys 文件中;
=====================================================================
直接编辑 authorized_keys 文件不但麻烦,还可能因为文件权限问题导致别人也登陆不了。
这里介绍 ssh-copy-id 命令会比较好。
seanlook
2016-12-10 14:02:00 +08:00
用 rsync 不就挺好,增量拷贝
gamexg
2016-12-10 14:07:19 +08:00
zstack
2016-12-10 14:09:32 +08:00
其实在 ssh-keygen 之后, 2 、 3 步只需要用这个命令就可以完成 ssh 公钥到远端的复制:
ssh-copy-id
cnnblike
2016-12-10 14:11:28 +08:00
哇塞,这种等级的内容都能用来做宣传?我的天
cxl008
2016-12-10 14:20:15 +08:00
好厉害!
Tink
2016-12-10 14:23:03 +08:00
这为啥要用 scp 啊?不能增量不能比对,好好的 rsync 不用?
zander
2016-12-10 14:28:06 +08:00
rsync 和 syncthing 都是更好的选择。
ETiV
2016-12-10 14:28:53 +08:00
中文互联网上搜 vim ,几乎全都是基础按键,没什么有深度的内容。

LZ 这种编辑人员,功不可没。
Allianzcortex
2016-12-10 17:50:04 +08:00
为什么要这样...很多时候开发服务器是不允许你改配置文件的, ssh-copy-id 在本地配好不就可以了
doubleflower
2016-12-10 17:53:26 +08:00
scp 拷文件的速度很感人,特别是大量小文件
Lelouchcr
2016-12-10 17:58:08 +08:00
Cipher 或者 Compression 也不说。。
debiann
2016-12-10 18:10:53 +08:00
ls 都太认真了, lz 只是打个广告而已,内容不重要。
RqPS6rhmP3Nyn3Tm
2016-12-10 18:27:43 +08:00
贵司营销人员要提高技术修养啊
hadoop
2016-12-10 18:30:04 +08:00
居然不知道 ssh-copy-id 也敢来宣传,差评
wtbhk
2016-12-10 20:49:03 +08:00
B
depress
2016-12-10 22:51:05 +08:00
本来以为楼主是要说用 expect ,还想着算了,毕竟给新手看的,不说啥了,结果一进来,万万没想到啊,我都不知道怎么喷了,服。
hanbaobao2005
2016-12-10 22:54:55 +08:00
看到 Linux ,看到定时就会想到 Ansible.
kiwi95
2016-12-10 22:55:52 +08:00
搞推广也要提高自己的姿势水平啊,知道唔知道,不要老是啊,搞的都是这么 too simple 的东西,一点都不 exciting

Angry
hellojammy
2016-12-10 23:54:19 +08:00
在各位大神面前献丑了,谢谢大家提醒,第③步是可以改用 ssh-copy-id 来做,但是假如服务器不是密码登录的,而是 SSH 秘钥文件登录的,则无法拷贝。

===========原文的第③步改为一下内容==============
③打开`id_rsa.pub`文件,并把它的内容拷贝到服务端(服务器 A )的 authorized_keys 文件中;或者直接使用`ssh-copy-id`命令把 id_rsa.pub 拷贝到服务器 A 中。如下命令,按提示输入登录密码即可拷贝。

ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip_address

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/326640

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX