linux 使用ssh到远端并且使用while的坑
如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了。
现在是想用一个脚本获取远程服务器端/root下面的文件:
#!/bin/bash cat 'ip.txt'|while read line;do
echo $line
access=`ssh $line "ls /root/ " `
done
结果: 脚本只对第一个IP做了检测,就直接跳循环。
问题分析:
while使用重定向机制,ip.txt文件中的信息都已经读入并重定向给了整个while语句,所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。问题就出在这里,ssh语句正好回读取输入中的所有东西。为了禁止ssh读所有东西增加一个< /dev/null,将ssh 的输入重定向输入。
解决策略:
1、使用for循环代表while,因为for没有一次把文件内容缓存获取过来,代码段修改如下:
for ip in `cat ip.txt`; do
echo $ip
access=`ssh $ip "ls /root/ " `
echo $access
done
2、若坚持使用while循环,那么需要对ssh增加-n参数,为什么增加了-n参数也可以解决问题呢?通过man ssh查看-n参数的说明
Redirects stdin from /dev/null (actually, prevents reading from stdin)
#!/bin/bash cat 'ip.txt'|while read line;do
echo $line
access=`ssh -n $line "ls /root/ " `
done
linux 使用ssh到远端并且使用while的坑的更多相关文章
- Linux使用sshfs通过ssh挂载远端机器
Linux使用sshfs通过ssh挂载远端机器 今天自己的开发机器突然磁盘剩余空间报警,再弄一块硬盘不太现实,于是想到了公司有一台机器上挂了一个大的磁盘,于是,我把目标偷偷锁定到了那个机器上. 折腾了 ...
- Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧
一.问题概述 在一个多月前,组长让我研究下持续集成.我很自然地选择了jenkins.当时,(包括现在也是),部分服务器用的是windows主机. 我当时想了想,如果我把jenkins装在windows ...
- Linux下 SSH远程管理服务
第1章 SSH基本概述 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定 在进 ...
- Go实现ssh执行远端命令及远程终端
什么是ssh? SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露. 互联 ...
- Debian 7(Linux) 安装SSH使用SecureCRT连接配置
1 Debian 安装 ssh2 首先确保你的Debian或者linux安装ssh并开启ssh服务 Debian和ubuntu的安装方法一样,只要源OK的话,可以直接安装 apt-get instal ...
- linux查看ssh用户登录日志与操作日志
linux查看ssh用户登录日志与操作日志 2013-11-01转载 ssh用户登录日志 linux下登录日志在下面的目录里: 代码如下 复制代码 cd /var/log 查看ssh用户的登录日 ...
- Linux下SSH免密码登录
转自:http://haitao.iteye.com/blog/1744272 ssh配置 主机A:10.0.5.199 主机B:10.0.5.198 需要配置主机A无密码登录主机A,主机B 先确保所 ...
- Linux下SSH+Firefox
Linux下SSH+Firefox 简明FQ攻略 FQ的软件有很多,楼主原来在Windows下用过Tor(洋葱头).Puff.freegate等,一般只需要打开FQ软件,简单的设置后就可以FQ浏览了. ...
- Linux修改SSH端口和禁止Root远程登陆
Linux修改ssh端口22 vi /etc/ssh/ssh_config vi /etc/ssh/sshd_config 然后修改为port 8888 以root身份service sshd res ...
随机推荐
- libwebsocket manual
Name: libwebsocket_cancel_service - Cancel servicing of pending websocket activity Synopsis: void li ...
- 《windows程序设计》学习_4.1:计时器(可用于扫雷)
为了做一个逼真的扫雷,我的扫雷程序的位图都是从windowsXP下面的扫雷里来的.具体是怎么获取位图的呢?win8.1不给力,习惯了vc++6.0,所以虚拟机里装上了xp,用vc++6.0加载扫雷程序 ...
- [Leetcode][Python]32: Longest Valid Parentheses
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 32: Longest Valid Parentheseshttps://oj ...
- poj1665
#include <stdio.h> #include <stdlib.h> #define pi 3.1415926 int main() { float dia,tim; ...
- Trunk Club:颠覆男士时装零售的创业公司_第1页_福布斯中文网
Trunk Club:颠覆男士时装零售的创业公司_第1页_福布斯中文网 Trunk Club:颠覆男士时装零售的创业公司
- CouldnotcreateServerSocketonaddress0.0.0.0/0.0.0.0:9083
错误记录 安装的时候遇到了如下错误 Exception in thread "main" org.apache.thrift.transport.TTransportExcepti ...
- Objective-C时间戳转换的转换和时间
什么是时间戳? 时间戳(timestamp),一般是一个字符序列.唯一地标识某一刻的时间.数字时间戳技术是数字签名技术一种变种的应用. 思考:简单来讲就是依据文件hash加密后生成的摘要和时间生成的时 ...
- 关于c语言中负数位移位操作的漫谈
近期有个朋友在程序中使用了对16进制数做负数移位(编译器是gcc),本人最次产生好奇.所以研究了一些. 对一个数做负数位移位的操作是不规范的,可是是可行的. 详细样例: char tmp = 0x10 ...
- ASP连接sql server实例解析
1.首先确定自己的iis没有问题 2.其次确定自己sqlserver没有问题 然后在iis的文件夹wwwroot里,建立一个文件 名为testSqlServer.asp,编写代码例如以下就可以 < ...
- ##DAY14——StoryBoard
•iOS下可视化编程分为两种⽅式:xib和storyboard. •在使用xib和storyboard创建GUI过程中,以XML文件格式 存储在Xcode中,编译时生成nib的二进制文件.在运行时, ...