ssh无密码登录多台机器,并让所有远程机执行相同命令
问题集锦
其实标题的内容就是很常见的集群操作,当有一个脚本或者一个命令需要很多个机器同时(或者说接近同时)执行时,就涉及到几个问题:
- 怎么通知每个主机?
- 每个主机收到通知后,怎么让主机执行命令?
- 怎么让上面的过程同时发生?
上面其实可以分为两步:
- 登录到单个机器
- 让单个机器执行命令
重复上面的两个操作,执行多进程或者创建子进程都能达到目标。
接下来的问题:
- ssh登录需要密码,怎么设置无需密码就可以登录
- 登录后怎么让登录的机器执行命令
ssh免密码登录
关于这个问题,可以参考这篇博客ssh免密码登录配置
大致的过程:
ServerA 的UserA用户 希望使用ServerB 中UserB的账号免密登录ServerB
→ ~ $ ssh-keygen -t rsa
#使用RSA加密算法生成密钥对 → ~ $ ssh-copy-id UserB@ServerB
#将自己生成的公钥复制到远程主机的authorized_keys文件上
设置完成后,就可以在本地使用ssh UserB@ServerB来免密登录了。
让远程机执行命令
登录远程机之后,让远程机执行命令,在ServerB
你可能你会说下面这个命令
→ ~ $ ssh UserB@ServerB && echo "hello world" > index
然而上面这个命令并不会像我们期望的那样执行,过程如下:
- 在ServerA的终端执行上面这条命令
- 会先使用UserB免密登录到ServerB
- 接着会进入ServerB的终端
- 那条命令中的echo命令就被挂起了,因为ssh进程还没执行结束呢
- 在ServerB的终端中执行exit,退出ServerB
- 回到ServerA的终端,继续执行echo命令,然后命令执行结束
查看ServerA中UserA的子目录,会多出一个index文件,但是ServerB中UserB的家目录中却不会有index文件。
正确做法
→ ~ $ ssh UserB@ServerB 'echo "hello world" > index'
没错,只是单纯的用引号将命令括起来就行了,这样会被当做位置参数传递给ssh,然后就能成功在远程机上运行了
同时对多个机器发指令(多进程并行)
Linux里面的多进程有一个特别方便的方法:在命令后面加一个&符号,那么该命令就会在后台执行,也就是多进程了。
所以要有了前面几步基础之后,可以下面这样做,实现向所有机器同时发送指令:
#!/bin/bash
#多进程对多个机器同时发指令 #注意下面的用户和ip是一一对应的,顺序不要搞错,额否则不能登录
#user1登录server1
server=(
"192.168.1.1"
"192.168.1.2"
"192.168.1.3"
"192.168.1.4"
)
user=(
"test1"
"test2"
"test3"
"test4"
) #服务器和用户账号对应关系
tot_s=${#server[*]}
tot_u=${#user[*]} if [ $tot_s -ne $tot_u ];then
echo "服务器和用户账号数量不对应,请检查server列表和user列表"
exit
fi i=0
while [ $i -lt $tot_u ];do
(ssh ${user[$i]}@${server[$i]} "command1;command2" & ) 2>> ~/Desktop/log.txt
#注意一定要在最后面加&符号,否则就是串行执行,不能体现并行。
#将错误重定向到日志文件中 if [ $? -ne 0 ];then
echo "${user[$i]}@${server[$i]}执行过程中出现异常"
fi #注意迭代器别忘了自增
i=$[ $i + 1 ]
done
注意:前提是已经可以无密登录,否则每次连接都要输入密码。
ssh无密码登录多台机器,并让所有远程机执行相同命令的更多相关文章
- 【转发】SSH无密码登录的配置
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:http://cn.soulmachine.me/ 原文地址:http ...
- 批量实现多台服务器之间ssh无密码登录的相互信任关系
最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t ...
- 普通用户ssh无密码登录设置
这段时间在做Hadoop的环境配置,用root用户只需要按照一定的步骤进行操作就可以直接实现无密码登录,但如果使用新建用户,怎么尝试都不行. 本帖大部分都是其他人帖子的内容.如果按照下面的步骤还是不能 ...
- 【原创】Linux服务器集群通过SSH无密码登录
SSH 无密码授权访问slave集群机器 1. 安装SSH,所有集群机器,都要安装SSH环境介绍: Master : CNT06BIG01 192.168.3.61 SLAVE 1: CNT06BI ...
- Linux SSH无密码登录
Linux服务器常见的登录方式有两种:密码登录.秘钥登录.工作中我们最常使用的是用秘钥登录的方法,因为使用秘钥登录更高效.更安全. 如何实现SSH无密码登录: 原理:无密码ssh登录的主要操作为将本机 ...
- SSH无密码登录及远程拷贝命令SCP的使用
SSH无密码登录 1.生成密钥对(公钥和私钥) $ cd /home/cen/.ssh $ ssh-keygen -t rsa #生成密钥,使用rsa方式进行加密,四个回车 $ ssh-copy-id ...
- 集群之间配置 SSH无密码登录
集群之间配置 SSH无密码登录 配置 ssh (1)基本语法 ssh 另一台电脑的 ip 地址 (2)ssh 连接时出现 Host key verification failed 的解决方法 # ss ...
- 配置SSH无密码登录【原著】
环境:两台Centos虚拟机,配置了静态的ip.(详见虚拟机如何配置静态的IP地址的操作步骤) 192.168.75.21192.168.75.22 第一步:为每台服务器配置静态IP地址参见: 虚拟机 ...
- ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访问(转)
转自:http://blog.csdn.net/pennyliang/article/details/8556662 ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访 ...
随机推荐
- Java多线程(三)如何创建线程
点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...
- Glyphicons 字体图标
- Python的datetime模块分析
datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1. datetime模块定义了5个类,分别是 1.datetime ...
- 【Teradata】配置PE和AMP(congfig和reconfig工具、vprocmanager)
The Reconfiguration and Configuration utilities are used to define the AMPs and PEs that operate tog ...
- 【漫画解读】HDFS存储原理
根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS存储机制与运行原理,非常适合Hadoop/HDFS初学者理解. 一.角色出演 如上图所示,HDFS存储相关角色与功能如下 ...
- 牛客 小a与星际探索 bfs
链接:https://ac.nowcoder.com/acm/contest/317/C?&headNav=acm来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...
- dicom学习文章
https://blog.csdn.net/column/details/dicom.html https://blog.csdn.net/zssureqh/article/details/49231 ...
- Ubuntu开启或重启ssh服务
开启ssh服务首先需要安装打开ssh服务的库: sudo apt-get install openssh-server 检查当前的ssh开启情况: ps -e |grep ssh 如果有sshd,则s ...
- Ubuntu16.04 下 hadoop的安装与配置(伪分布式环境)
一.准备 1.1创建hadoop用户 $ sudo useradd -m hadoop -s /bin/bash #创建hadoop用户,并使用/bin/bash作为shell $ sudo pass ...
- fastText文本分类算法
1.概述 FastText 文本分类算法是有Facebook AI Research 提出的一种简单的模型.实验表明一般情况下,FastText 算法能获得和深度模型相同的精度,但是计算时间却要远远小 ...