zoukankan      html  css  js  c++  java
  • 拷贝ssh公钥到多台服务器上

    这篇文章几乎是对Push SSH public keys to multiple host的翻译,谢谢该作者。

    使用SSH登陆、执行命令到远程机器需要输入密码,很多系统需要免输密码访问远程机器,比如hadoop主节点访问子节点时,这时可以使用ssh-copy-id命令将公钥拷贝到远程机器上,
    比如: ssh-copy-id -i hduser@192.168.7.70

    但如过面临很多机器,比如5,6,7,8台以上,一般会想到写个脚本,批量执行,但ssh-copy-id命令执行过程中有两处需要人工参与,

    一是当你看到如下提问时,必须对每台机器回答yes or no,

    The authenticity of host 'myfirsthost.work.cainmanor.com (10.256.33.106)' can't be established.
    RSA key fingerprint is fc:40:7c:de:b8:ac:a2:f5:d4:11:d0:0e:b2:77:8a:63.
    Are you sure you want to continue connecting (yes/no)? yes

    二是每台机器的密码,当你ssh-copy-id到每台机器时,需要输入访问这台机器的密码,

    为了解决第一个问题,可以修改~/.ssh/config文件(没有则创建),把下面两行增加到该文件中,

    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null

    在完成所有SSH拷贝动作后,记得用#号键注释掉(不注释也没事。。。)。

    为了解决第二个问题,可以使用sshpass工具,该工具可能需要下载,我在Centos上需要手动下载rpm包安装。sshpass为ssh提供所需的密码,可以执行如下命令,

    sshpass -p 'PASSWORD' ssh-copy-id hduser@host

    实际操作时,会把上面这条命令放到像下面这样的脚本文件里,并提供hosts文件,hosts文件记录所有需要拷贝公钥的机器,

    for X in `cat hosts`
    do
    sshpass -p 'PASSWORD' ssh-copy-id hduser@${X}
    done

    hosts文件记录host信息这种模式在批量执行ssh命令很常见。

    在完成SSH公钥拷贝后,可以选择pssh工具批量执行命令。

  • 相关阅读:
    封装异常处理之坑
    30multipart/form-data和application/x-www-form-urlencoded的区别(二)urlencoded之自动deocde
    使用MAT时的Shallow Size和 Retained Size的区别
    当动态代理遇到ioc
    线程池的原理
    synchroned原理与对象头(yet)
    mysql压力测试与qps监控
    一种mysql jvm死锁
    Android Jni变量对照表
    结构体中使用函数指针
  • 原文地址:https://www.cnblogs.com/dioncnblogs/p/3770129.html
Copyright © 2011-2022 走看看