问题集锦

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

  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. 一、JSP标签介绍,自定义标签

    一.JSP标签介绍 1. 标签库有什么作用 自定义标签库是一种优秀的表现层技术,之前介绍的MVC模式,我们使用jsp作为表现层,但是jsp语法嵌套在html页面,美工还是很难直接参与开发,并且jsp脚 ...

  2. 安全之路 —— 利用APC队列实现跨进程注入

    简介 在之前的文章中笔者曾经为大家介绍过使用CreateRemoteThread函数来实现远程线程注入(链接),毫无疑问最经典的注入方式,但也因为如此,这种方式到今天已经几乎被所有安全软件所防御.所以 ...

  3. php笔记(一)php介绍及数据类型

    php 官方手册:http://php.net/manual/zh/ 1.PHP(全称 Hypertext Preprocessor,超文本预处理器的字母缩写)是一种服务器端脚本语言,它可嵌入到 HT ...

  4. LeetCode算法题-Reverse Vowels of a String(Java实现-四种解法)

    这是悦乐书的第206次更新,第218篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第74题(顺位题号是345).编写一个函数,它将一个字符串作为输入,并仅反转一个字符串的 ...

  5. C语言 文件的读写操作

    //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> #include<stdlib.h> void ...

  6. ABAP 7.40, SP08 中的 Open SQL 新特性

    1,使用 data_source~*指定列 在7.40, SP08中,可以在SELECT语句中使用data_source~*来指定选取不同的数据库表.视图的全部列来作为结果集.它也可以和单独指定的列c ...

  7. Python闭包和装饰器再复习

    闭包 闭包的定义 在一个外函数中定义了一个内函数,并且内函数用到了外部函数的变量,而且外函数的返回值是内函数的引用,这就构成了一个闭包. 一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东 ...

  8. (转)ElasticSearch教程——汇总篇

    https://blog.csdn.net/gwd1154978352/article/details/82781731 环境搭建篇 ElasticSearch教程——安装 ElasticSearch ...

  9. ActiveMQ后台使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/nangeali/article/details/81514517默认地址 http://192.16 ...

  10. 手动设定统计数据 set_table_stats

    PROCEDURE SET_TABLE_STATS Argument Name Type In/Out Default? ------------------------------ -------- ...