shell while-ssh
Linux shell脚本使用while循环执行ssh的注意事项
浏览:86次 出处信息
如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了。
一、场景还原:
我现在是想用一个脚本获取一定列表服务器的运行时间,首先我建立一个名字为ip.txt的IP列表(一个IP一行),再建好密钥实现不用密码直接登录。然后写脚本如下:
#!/bin/bash
while read ips;
do
    echo $ips;
done < ip.txt
   脚本实现了逐行读取列表中的IP,但是:
#!/bin/bash
while read ips;
do
    echo $ips;
    upt=`ssh root@$ips "uptime"`;
    echo $upt;
done < ip.txt
   脚本只对第一个IP做了检测,就直接跳出来了。
二、问题分析:
while使用重定向机制,ip.txt文件中的信息都已经读入并重定向给了整个while语句,所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。问题就出在这里,ssh语句正好回读取输入中的所有东西。为了禁止ssh读所有东西增加一个< /dev/null,将ssh 的输入重定向输入。
三、解决策略:
1、使用for循环代表while,因为for没有一次把文件内容缓存获取过来,代码段修改如下:
for ips in `cat ip.txt`; do
       echo ${ips};
       upt=`ssh root@${ips} uptime`;
       echo $upt;
done
   2、若坚持使用while循环,那么需要对ssh增加-n参数,为什么增加了-n参数也可以解决问题呢?通过man ssh查看-n参数的说明:
Redirects stdin from /dev/null (actually, prevents reading from stdin)
这就和
修改后的代码如下:
#!/bin/bash
while read ips;
do
    echo $ips;
    upt=`ssh -n root@$ips "uptime"`;
    echo $upt;
done < ip.txt
shell while-ssh的更多相关文章
- shell实现SSH自动登陆
		h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ... 
- shell实现SSH自动登陆【转】
		前言 公司开发使用docker,每次登陆自己开发机总要输入 ssh user_name@ip_string,然后再确认输入password,手快了还经常会输错.作为一个懒人,肯定要找一个取巧的方式,查 ... 
- 工作中常用shell之ssh登陆不用输入"yes"
		ip="192.168.5.166"ssh $ip -o StrictHostKeyChecking=no //ssh登陆不用输入"yes" ... 
- shell脚本ssh自动登陆服务器
		#!/bin/shsshpass -p "your password" ssh user@ip 注意: 需要先安装sshpass: 源码下载地址:http://sourceforg ... 
- redis写shell与ssh免密码登陆
		redis-cli参数:-h :指定要连接的主机IP或域名-p :指定连接的端口-a :指定密码-r :执行指定的命令-n :数据库名-x :将最后一个参数输出为value redis写shell- ... 
- Mac使用Shell(终端)SSH连接远程服务器
		先进入终端 输入:ssh -p 端口号 服务器用户名@ip (例如ssh -p 22 root@119.10.168.63)回车,到这会让你输入yes或者no来确认是否连接,输入yes回车 然后输入在 ... 
- Linux shell (ssh批量配置免秘)读取配置文件,进行远程操作
		需要目标机器安装有 expect 命令 分成五个文件config.ini(配置文件).id_ras.pub(公钥).read.sh(一个函数,用于读取配置文件).test.sh(执行文件).run.s ... 
- Shell批量SSH免交互登录认证
		脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. 脚本支持系统:Ubuntu和C ... 
- shell编程-ssh免交互批量分发公钥脚本
		脚本基本原理 1.控制端免交互创建秘钥和公钥: 1 ssh-keygen -t rsa -f /root/.ssh/id_rsa -N "" 2.免交互发送公钥 1 sshpass ... 
- ssh免密验证,shell批量设置
		ssh免密验证,shell批量设置 #ssh免密验证,shell自动设置 echo '#!/bin/sh . /etc/init.d/functions [[ -f /usr/bin/expect ] ... 
随机推荐
- 另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新
			目的:vue-cli构建的vue单页面应用,某些特定的页面,实现前进刷新,后退不刷新,类似app般的用户体验.注: 此处的刷新特指当进入此页面时,触发ajax请求,向服务器获取数据.不刷新特指当进入此 ... 
- TextView等组件的LayoutParams不能随便用,不然组件不显示
			TableLayout.LayoutParams lpRow = new TableLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTEN ... 
- Spring Boot与Logback的运用(自定义异常+AOP)
			在开发以及调试过程中,程序员对日志的需求是非常大的,出了什么问题,都要通过日志去进行排查,但是如果日志不清或者杂乱无章,则不利于维护 这边就比较详细的列举几种类型的日志,供大家参考 首先明白logba ... 
- 541. Reverse String II
			static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ... 
- 提高搜狗SR值和关键词排名
			凭借“输入法-浏览器-搜索”三级火箭战略,搜狗搜狗使用率已超过10%,并成功挤掉谷歌成为国内第二大搜索引擎服务提供商.随着搜狗的快速发展,越来越多的站长将目光投向针对搜狗搜索的关键词优化. 大家都知道 ... 
- 2018.09.06 警卫安排(树形dp)
			描述 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:有边直接相连的宫殿可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全 ... 
- java常用设计模式一:单例模式
			1.饿汉式 package singleton.demo; /** * @author Administrator * @date 2019/01/07 */ public class Single ... 
- CentOS7查看网络的相关命令
			转载自:https://www.linuxidc.com/Linux/2015-07/119555.htm 1.切换到超级用户 [Oscar@localhost 桌面]$ su root 2.查询可用 ... 
- Apache Struts 2 Documentation Big Picture
			http://struts.apache.org/docs/big-picture.html 1. HttpServletRequest 穿越各个过滤器到达FilterDispatcher(这个已经不 ... 
- 全面理解iOS开发中的Scroll View[转]
			from:http://mobile.51cto.com/hot-430409.htm 可能你很难相信,UIScrollView和一个标准的UIView差异并不大,scroll view确实会多一些方 ... 
