利用ssh-copy-id复制公钥到多台服务器

在做系统运维的时候,可能以免密码通过ssh方式登录到远程主机,这时就首先需要将本机的公钥复制到远程主机,用ssh-copy-id命令可以轻松做到。

如果没有生成密钥对,要先生成密钥,再将公钥复制到远程主机,usernaem是远程主机的用户名,host是远程主机的ip地址或域名

#生成密钥ssh-keygen -t rsa#复制公钥到远程主机
ssh-copy-id [email protected]

对于单台远程主机,直接使用命令就可以了,但如果有很多台主机,需要一台台操作,就费时费力了。那么有什么好办法,能够一次性将公钥复制到所有主机呢?要解决这个问题,要自动处理在执行ssh-copy-id命令时两处需要手工介入的过程。

一是在看到类似如下提示时,要输入”yse“进行确认。

The authenticity of host ‘10.10.5.133 (10.10.5.133)‘ can‘t be established.
RSA key fingerprint is SHA256:anhO4ihOzEsun0zDRNAu8Wew9Bxntr7Di6qpJVAnXFQ.
Are you sure you want to continue connecting (yes/no)?

二是需要输入远程主机的密码

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ubuntu/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Warning: Permanently added ‘10.10.5.133‘ (RSA) to the list of known hosts.
[email protected]‘s password:

解决第一个问题,可以修改配置文件或运行ssh-copy-id命令加ssh的相关参数。

# -o StrictHostKeyChecking=no,连接新主机时,不进行公钥确认
ssh-copy-id -o StrictHostKeyChecking=no [email protected]

或者在当前用户目录的.ssh/config文件,添加如下配置项,如果.ssh目录没有config文件,可自行创建。

StrictHostKeyChecking=no

接着来解决第二个问题,安装sshpass命令,在ubuntu中可以用apt-get命令直接安装,在Centos下,请google搜索安装方式,在这里就不作说明了。

apt-get install sshpass

通过安装好的sshpass命令,运行下面命令就能无需手工介入将ssh公钥复制到远程主机。

sshpass -p ‘YOUR_PASSWORD‘ ssh-copy-id -o StrictHostKeyChecking=no [email protected]

如果使用修改配置文件的方式,可用下面的命令。

sshpass -p ‘LSU_201401‘ ssh-copy-id [email protected]

在解决了上面的两个问题之后,接下来的事情就简单了, 可以将远程主机的域名或IP地址记录在一个文件中,比如记录在remote-hosts文件中,运行下面的脚本就能批量的将公钥复制到远程主机中。

for host in $(cat remote-hosts)
do
    sshpass -p ‘YOUR_PASSWORD‘ ssh-copy-id -o StrictHostKeyChecking=no [email protected]${host}
done

注:上面的脚本是远程主机的密码都是相同,在命令行将密码硬编码写死,如果每台主机的密码不一样,可以将密码记录在remote-hosts文件中,通过cut命令分割,可以分别获得主机的IP地址或域名和对应的密码,当然如果ssh的端口号不是默认的22,也可以一并记录。如下列格式:

10.10.10.10:2222:YOURPASSWORD

可将上面的脚本稍做修改:

for host in $(cat remote-hosts)
do
   ip=$(echo ${host} | cut -f1 -d ":")
   port=$(echo ${host} | cut -f2 -d ":")
   password=$(echo ${host} | cut -f3 -d ":")
   sshpass -p ${password} ssh-copy-id -p ${port} -o StrictHostKeyChecking=no [email protected]${ip}
done

  

  

  

 

时间: 2024-08-10 02:39:23

利用ssh-copy-id复制公钥到多台服务器的相关文章

拷贝ssh公钥到多台服务器上

这篇文章几乎是对Push SSH public keys to multiple host的翻译,谢谢该作者.使用SSH登陆.执行命令到远程机器需要输入密码,很多系统需要免输密码访问远程机器,比如hadoop主节点访问子节点时,这时可以使用ssh-copy-id命令将公钥拷贝到远程机器上,比如: ssh-copy-id -i [email protected]但如过面临很多机器,比如5,6,7,8台以上,一般会想到写个脚本,批量执行,但ssh-copy-id命令执行过程中有两处需要人工参与,一是

定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器

需求介绍:每天备份线上正式库并且把备份文件复制到测试服务器,测试服务器自动把数据库备份文件还原. 方案介绍: 第1步:在正式库上创建存储过程用来备份数据库和复制到测试服务器,然后新建作业每天定时执行创建的存储过程. 第2步:在测试服务器数据库上创建存储过程用来还原数据库,然后新建作业每天定时执行创建的存储过程. 准备: 在正式服务器上共享备份文件的文件夹,并且给文件夹everyone的权限. 在测试服务器上创建共享文件夹,并且给文件夹everyone的权限. 正式库备份数据库和复制数据库代码:

使用expcet传公钥到多台服务器

#!/usr/bin/expect if { $argc != 2 } { send_user "usage: expect ssh.exp ip\n" exit } #define var set ip [lindex $argv 0] set password [lindex $argv 1] spawn ssh-copy-id -i $ip expect { -timeout 2 "(yes/no)?" {send "yes\r";exp_

linux批量复制文件到多台服务器脚本

=======================xsync.sh====================================== #!/bin/bash if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi p=$1 #echo p=$p dir=`dirname $p` #echo dir=$dir filename=`basename $p` #echo filename=$filename cd $dir fullpath=`pw

linux 复制文件到另一个服务器脚本 scp expect

这里用到了expect 命令,需要先安装tcl 然后 安装expect 安装不再介绍可以参考下面链接:https://www.cnblogs.com/daojian/archive/2012/10/10/2718390.html 脚本代码:oracle备份 #!/bin/sh export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=or

rsync利用ssh协议复制文件

不需要搭建rsync服务 实现两台服务器文件的传输: rsync -artvz -e  "ssh -p22 -lroot"  redis4.tar.gz  192.168.1.1:/data/backup/ rsync利用ssh协议复制文件

rsync参数详解、利用ssh、rsync 实现数据的定时同步

rsync 简介 rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文 件.也可以使用 rsync 同步本??硬盘中的不同目录. rsync 是用于替代 rcp 的一个工具,rsync 使用所谓的 rsync算法 进行数据同步,这种算法只传送两个文件 的不同部分,而不是每次都整份传送,因此速度相当快.您可以参考 How Rsync Works A PracticalOverview 进一步了解 rsync 的运作机制. rsy

【Struts2+Hibernate3+Spring3】利用SSH整合,完成打印用户表,用户登录、注册、修改密码系统

本文视图尽可能不杂糅其它技术,尽可能少写代码,完成SSH整合.以致于各位在现有网上资料越来越天花龙凤之下,清晰地了解到传说中的三大框架SSH是怎么整合的. 一.SSH的下载 首先SSH的下载就已经是一个难点.SSH三个地方同时推出各自的新技术,已经要求利用Maven完成其版本的同步.毕竟Spring的版本,决定其能整合什么版本的Struts与Hibernate.Spring3.0.5就不能整合Hibernate4.x了.因此本文选取的SSH的版本,分别为struts 2.3.20 GA.Hibe

利用 ssh 的用户配置文件 config 管理 ssh 会话

转载来自:http://dhq.me/use-ssh-config-manage-ssh-session 通常利用 ssh 连接远程服务器,一般都要输入以下类似命令: 1 ssh [email protected]hostname -p port 如果拥有多个 ssh 账号,特别是像我这种喜欢在终端里直接 ssh 登陆,不用 PuTTY.SecureCRT之类的 ssh 客户端的,要记住每个ssh 账号的参数,那是多么蛋疼的事情. 还好,ssh 提供一种优雅且灵活的方式来解决这个问题,就是利用