Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
hellojammy
V2EX  ›  Linux

Linux 下的 SCP 无密码拷贝文件

  •  
  •   hellojammy ·
    hellojammy · Dec 10, 2016 · 6667 views
    This topic created in 3618 days ago, the information mentioned may be changed or developed.

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

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

    Angry
    hellojammy
    hellojammy
    OP
    Dec 10, 2016
    20
    在各位大神面前献丑了,谢谢大家提醒,第③步是可以改用 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
    xiuc001
    Dec 11, 2016
    21
    authorized_keys 和 .ssh 的权限设置都不说,差评!
    Yeoman
    Yeoman
    Dec 11, 2016 via Android
    22
    本来以为会多么高端。。。这个稍微用 ssh 多一点就会知道的吧(密码敲烦了直接搜一下就能搜到)
    binux
    binux
    Dec 11, 2016❤️1
    23
    @hellojammy 假如服务器不是密码登录的,那就已经是可以「无密码」拷贝文件了啊,为什么还要拷贝 id_rsa.pub ?
    你要么
    1. 不会给 ssh-copy-id 设置密钥登录
    2. 不会给不同主机设置不同密钥登录
    3. 不会给 scp 指定密钥
    要么三者都是

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