问题集锦

  其实标题的内容就是很常见的集群操作,当有一个脚本或者一个命令需要很多个机器同时(或者说接近同时)执行时,就涉及到几个问题:

  1.   怎么通知每个主机?
  2.   每个主机收到通知后,怎么让主机执行命令?
  3.   怎么让上面的过程同时发生?

  上面其实可以分为两步:

  1.   登录到单个机器
  2.   让单个机器执行命令

  重复上面的两个操作,执行多进程或者创建子进程都能达到目标。

  

  接下来的问题:

  1.   ssh登录需要密码,怎么设置无需密码就可以登录
  2.   登录后怎么让登录的机器执行命令

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

  然而上面这个命令并不会像我们期望的那样执行,过程如下:

  1.   在ServerA的终端执行上面这条命令
  2.   会先使用UserB免密登录到ServerB
  3.   接着会进入ServerB的终端
  4.   那条命令中的echo命令就被挂起了,因为ssh进程还没执行结束呢
  5.   在ServerB的终端中执行exit,退出ServerB
  6.   回到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无密码登录多台机器,并让所有远程机执行相同命令的更多相关文章

  1. 【转发】SSH无密码登录的配置

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:http://cn.soulmachine.me/     原文地址:http ...

  2. 批量实现多台服务器之间ssh无密码登录的相互信任关系

    最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t ...

  3. 普通用户ssh无密码登录设置

    这段时间在做Hadoop的环境配置,用root用户只需要按照一定的步骤进行操作就可以直接实现无密码登录,但如果使用新建用户,怎么尝试都不行. 本帖大部分都是其他人帖子的内容.如果按照下面的步骤还是不能 ...

  4. 【原创】Linux服务器集群通过SSH无密码登录

    SSH 无密码授权访问slave集群机器 1. 安装SSH,所有集群机器,都要安装SSH环境介绍:  Master : CNT06BIG01 192.168.3.61 SLAVE 1: CNT06BI ...

  5. Linux SSH无密码登录

    Linux服务器常见的登录方式有两种:密码登录.秘钥登录.工作中我们最常使用的是用秘钥登录的方法,因为使用秘钥登录更高效.更安全. 如何实现SSH无密码登录: 原理:无密码ssh登录的主要操作为将本机 ...

  6. SSH无密码登录及远程拷贝命令SCP的使用

    SSH无密码登录 1.生成密钥对(公钥和私钥) $ cd /home/cen/.ssh $ ssh-keygen -t rsa #生成密钥,使用rsa方式进行加密,四个回车 $ ssh-copy-id ...

  7. 集群之间配置 SSH无密码登录

    集群之间配置 SSH无密码登录 配置 ssh (1)基本语法 ssh 另一台电脑的 ip 地址 (2)ssh 连接时出现 Host key verification failed 的解决方法 # ss ...

  8. 配置SSH无密码登录【原著】

    环境:两台Centos虚拟机,配置了静态的ip.(详见虚拟机如何配置静态的IP地址的操作步骤) 192.168.75.21192.168.75.22 第一步:为每台服务器配置静态IP地址参见: 虚拟机 ...

  9. ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访问(转)

    转自:http://blog.csdn.net/pennyliang/article/details/8556662 ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访 ...

随机推荐

  1. Vue 学习笔记之快速入门篇

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与 ...

  2. docker 私有仓库简易搭建

    概要 本地私有仓库 局域网私有仓库 总结 概要 docker hub 使用非常方便,而且上面有大量的镜像可以使用. 但是,每次都远程下载镜像速度非常慢,如果能在本地做一个 docker 的仓库,多人协 ...

  3. #012python实验课

    通过三到四周的学习Python选修课程已经学到了网络爬虫这一环节. 基础语法混乱 这是,在进行周四实验课程的时候,一直遇到的一个问题.写着写着,就往C语言的语法方向跑了,可以说之前我仅仅是对,pyth ...

  4. ubuntu中利用qtcreator引用opencv249及采起采集卡的共享库

    opencv Link:https://github.com/opencv/opencv CqUsbCam link:https://github.com/niuxiaobaoer/CqUsbCam_ ...

  5. Teradata 终止回滚方法(rcvmanager工具)

    1.使用root用户登录数据库节点 ssh root 2.启动database window cnsterm 3.启动rcvmanager start rcvmanager 4.确认utiltiy在哪 ...

  6. SQL Alias(别名)

    通过使用 SQL,可以为列名称和表名称指定别名(Alias). SQL Alias 表的 SQL Alias 语法 SELECT column_name(s) FROM table_name AS a ...

  7. 关于HashMap的一些深入探索与理解

    在java中.大家差点儿是离不开对集合的使用的,像Map系列,List系列.Set系列.可是非常多人没有了解过或者研究过这些集合类究竟能够用在什么地方,而且有什么注意的地方.因此本文分Map系列和Li ...

  8. icon图标库记录

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 阿里巴巴: http://iconfont.cn/ 可以下载图标 github : x ...

  9. zabbix 应用监控作业笔记 ansible-playbook

    目录 目录结构 zabbix-web.yaml zabbix-backup.yaml zabbix-nfs.yaml zabbix-mysql.yaml zabbix-server.yaml zabb ...

  10. AJAX方式发送远程请求报错:No 'Access-Control-Allow-Origin' header

    AJAX GET方式发送远程请求,chrome开发者工具console中报错:XMLHttpRequest cannot load http://www.shikezhi.com/ajax/getDa ...