V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
hellojammy
V2EX  ›  Linux

Linux 下的 SCP 无密码拷贝文件

  •  
  •   hellojammy ·
    hellojammy · 2016-12-10 13:05:31 +08:00 · 4932 次点击
    这是一个创建于 2693 天前的主题,其中的信息可能已经有所发展或是发生改变。

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


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

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

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

    9.pic.jpg

    ②进入秘钥文件夹查看文件。其中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 [email protected]:/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
    

    至此,完成!

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

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

    Angry
    hellojammy
        20
    hellojammy  
    OP
       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
    xiuc001
        21
    xiuc001  
       2016-12-11 01:33:52 +08:00
    authorized_keys 和 .ssh 的权限设置都不说,差评!
    Yeoman
        22
    Yeoman  
       2016-12-11 03:41:20 +08:00 via Android
    本来以为会多么高端。。。这个稍微用 ssh 多一点就会知道的吧(密码敲烦了直接搜一下就能搜到)
    binux
        23
    binux  
       2016-12-11 03:53:31 +08:00   ❤️ 1
    @hellojammy 假如服务器不是密码登录的,那就已经是可以「无密码」拷贝文件了啊,为什么还要拷贝 id_rsa.pub ?
    你要么
    1. 不会给 ssh-copy-id 设置密钥登录
    2. 不会给不同主机设置不同密钥登录
    3. 不会给 scp 指定密钥
    要么三者都是

    那么,你这么做广告,是在招人到交流群教学的吗?教师有工资吗?
    paulagent
        24
    paulagent  
       2016-12-11 07:13:16 +08:00
    @debiann 你说到点子上了
    miao1007
        25
    miao1007  
       2016-12-11 09:09:38 +08:00 via Android
    为啥不同 expext
    9hills
        26
    9hills  
       2016-12-11 10:30:25 +08:00 via iPhone
    V2 的姿势水平真是越来越低了……
    jyf007
        27
    jyf007  
       2016-12-11 11:15:24 +08:00 via Android
    还不如管道直接传啊
    http://www.orczhou.com/index.php/2013/11/tranfer-data-faster-on-the-fly/
    而且 scp 原理类似
    jyf007
        28
    jyf007  
       2016-12-11 11:16:05 +08:00 via Android
    jyf007
        29
    jyf007  
       2016-12-11 11:17:18 +08:00 via Android
    @ETiV +1 LZ 拉低了互联网从业人员的素质。
    changwei
        30
    changwei  
       2016-12-11 13:02:38 +08:00
    我看到标题无密码以为是用其他什么高科技身份验证方式,没想到就是 ssh 。。。
    julyclyde
        31
    julyclyde  
       2016-12-11 14:12:46 +08:00
    大家注意看第一行就好了
    全篇精华就在第一行
    Showfom
        32
    Showfom  
       2016-12-11 15:28:36 +08:00 via iPhone
    问一下 scp 这传输速度怎么容忍.....所以能用 rsync 就别用 scp isftp 这种速度那么慢的东西了
    Showfom
        33
    Showfom  
       2016-12-11 15:29:22 +08:00 via iPhone
    @Showfom 手机瞎 jiba 联想 是 scp sftp
    mazyi
        34
    mazyi  
       2016-12-11 20:14:18 +08:00
    全栈交流, 666
    goodryb
        35
    goodryb  
       2016-12-11 21:28:39 +08:00
    我下意思的看了下是不是网址打错了,进到了某某论坛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3894 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:24 · PVG 18:24 · LAX 03:24 · JFK 06:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.