踩坑记录:shell脚本循环调度ssh,仅循环一次

SSH自动重连脚本 实现SSH的自动重连,比如机器正在开机或者网速慢,可以自行不断尝试,直至成功连接。 阅读详情

一个简单的脚本,将需要的文件传出到远程机器上,再调度脚本远程执行,达到批量配置机器的目的

#!/bin/bash

dir=$(pwd)
example=$1

cat file.txt  | while read ip2
do
        echo $ip2
        ssh-keygen -f "/root/.ssh/known_hosts" -R $ip2
        sshpass -f password scp -o StrictHostKeyChecking=no ${dir}/config.sh  ubuntu@$ip2:/home/ubuntu/
        sshpass -f password scp -o StrictHostKeyChecking=no ${dir}/meIp.txt ubuntu@$ip2:/home/ubuntu/
        sshpass -f password ssh -o StrictHostKeyChecking=no ubuntu@$ip2 "sudo bash /home/ubuntu/config.sh $example"
done

但是执行脚本之后,发现循环只走了一次就退出了。
注释掉最后一行ssh命令,前面的scp命令都按照预期走完循环,那么问题只能出在ssh上了。

问题在这里:

-n Redirects stdin from /dev/null (actually, prevents reading from stdin). This must be used when ssh is run in the background. A common trick is to use this to run X11 programs on a remote machine. For example, ssh -n shadows.cs.hut.fi emacs & will start an emacs on shadows.cs.hut.fi, and the X11 connection will be automatically forwarded over an encrypted channel. The ssh program will be put in the background. (This does not work if ssh needs to ask for a password or passphrase; see also the -f option.)

可以说这个选项是专门用来解决这个问题的。用/dev/null来当ssh的输入,阻止ssh读取本地的标准输入内容。

将上述脚本修改为

sshpass -f password ssh -o StrictHostKeyChecking=no ubuntu@$ip2 -n "sudo bash /home/ubuntu/config.sh $example"

循环正常执行

Shell脚本实现多台机器SSH互信免密登录 阅读详情

相关推荐

双脉冲测试中IGBT驱动电阻和驱动电容的研究

  在LTspice中没有双脉冲波形发生器,要做一个双脉冲的波形只能用电压源来进行特殊设置,不是很方便,为此我写了一个双脉冲波形发生器,有需要的可以下载。双脉冲波形发生器。   如下,该元器件可以自定义延迟时间Td,第一个脉冲宽度T1,第二个脉冲宽度T3,两个脉冲间隔T2,脉冲循环个数Ncycle以及高低电平Vhigh,Vlow。       IGBT开通时Rg的影响: 如果增大Rg: ①开通延...

gaoyong_wang的博客 8351

linux ssh 隧道 取消,linux – 如何设置后台ssh隧道的自动(重新)启动

您可以执行以下操作,而不是使用ps检查ssh进程创建脚本,执行以下操作并通过crontab -e将其添加到crontab#!/bin/shREMOTEUSER=usernameREMOTEHOST=remotehostSSH_REMOTEPORT=22SSH_LOCALPORT=10022TUNNEL_REMOTEPORT=8080TUNNEL_LOCALPORT=8080createTunnel...

weixin_33929779的博客 558

使用 Mid360 从零开始搭建实物机器人入门级导航系统 —— 基于 Fast_Lio 和 Move_Base

本文详细介绍了如何使用Mid360机器人从零开始搭建一个基于Fast_Lio和Move_Base的入门级导航系统。通过配置 ROS2、集成激光雷达、IMU、Fast_Lio、Move_Base 等模块,我们成功构建了一个能够实现自动导航的机器人系统。在实际开发中,随着需求的变化,你可以不断调整参数、优化路径规划算法、增加新的传感器等,逐步提升机器人的智能与功能。

小蜗牛的珍贵百宝箱 3564

Linux使用while循环同ssh命令导致只能遍历一次的问题

Linux使用while循环同ssh命令导致只能遍历一次的问题

二木成林 1689

ARM Cortex-M系列授权解析:从研发到量产的免费与付费之路

本文深入解析了ARM Cortex-M系列内核从研发到量产过程中的授权模式。研发阶段可利用ARM DesignStart等免费资源进行原型验证,但产品商业化量产则需支付授权费与版税。文章对比了采购商用MCU与自研芯片的成本差异,并探讨了RISC-V作为免费替代方案在IoT领域的应用前景与挑战,为开发者提供了清晰的选型指南。

weixin_29292431的博客 494

SpringBoot 中 @RequestMapping 及衍生注解的全面解析与实践

本文全面解析Spring Boot中@RequestMapping及其衍生注解的使用,涵盖核心功能、HTTP方法特定注解(@GetMapping/@PostMapping等)、属性详解(路径/参数/头信息等)以及路径变量处理。文章详细介绍了注解的组合使用、继承特性、版本控制策略等高级应用,并针对405/404等常见错误提供解决方案。通过学习这些注解的规范用法,开发者能够构建符合RESTful风格的API接口,提升代码可读性和可维护性。建议优先使用HTTP方法特定注解,合理规划URL结构,并注意避免路径冲突。

Java&AI小吕布的博客 2037

shell 基础之 for 循环

格式1: for 变量 in 值1 值2 值3 值4…… do 执行语句 done 格式2: for((变量赋值;条件;变量变换)) do 执行语句 done 例1:for循环输出几个数值: vi for1.sh for i in 1 2 3 4 5 6 do echo $i done chmod 755 for1.sh...

zzx_nihao的博客 587

电路课设-音响分频器电路设计

(一)题目简介 1.一阶分频器电路设计 假定高音和低音扬声器均等效为 16 欧姆电阻,设计如图 2 的简单分频器电 路,要求高低频分界(两个滤波器的截止频率)为 5kHz。 1) 写出高音扬声器和低音扬声器电压对于 vs 的传递函数,确定电路中电 容 C 和电感 L 的元件值;2)利用 AC 频率扫描分析求出两个扬声器电压的频率响应曲线,验证计算 结果。用包含高低频成分的电压 vs 激励进行测量验证。 3)计算并利用 EWB 仿真证明从 vs 看进去的阻抗为一常数 16 欧姆。

weixin_53507617的博客 1万+

在shell脚本中for循环执行ssh操作远程主机命令执行失效的问题

首先看一下shell脚本: #! /bin/bash for i in node2 node1 do ssh $i ‘java -classpath /opt/file/project_datawarehouse/log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar com.jiahua.appclient.AppMain $1 $2 >...

qq_39886984的博客 4606

ollama接入图像识别大模型

ollama接入图像识别大模型

qq_36437991的博客 2075

代谢组数据分析(十五):基于python语言构建PLS-DA分类预测模型

本教程阐述典型代谢组学数据分析工作流程,用于二元分类结果的研究。流程主要步骤如下:首先从 Excel 表格导入代谢物与实验数据,接着基于汇总 QC 进行数据清洗。随后借助主成分分析可视化检查数据质量,再开展两类单变量统计。之后运用偏最小二乘判别分析(PLS - DA)实施多变量分析,此过程涵盖模型优化(对比 R2 与 Q2)、置换测试及明确模型预测指标、确定特征重要性、对模型预测数据进行可视化。最终将统计表格导出至 Excel 表格,完整呈现从数据导入到分析结果输出的全过程。

专注生信领域 2875

shell 脚本中while 循环只执行一次的问题

自己写的一个获取所有远程服务器数据库启动配置信息的bash 脚本,发现循环里的ssh远程命令只能执行一次,感觉很奇怪,以前没这么使用过,我的脚本为 #!/bin/bash ##generateaseparatedline foriin`seq080` do vv+="#" done #echo$vv;exit ## cat...

weixin_34216196的博客 1047

Sigrity Power DC Resitance Network Model Generation模式生成电阻SPICE模型操作指导

Sigrity Power DC Resitance Network Model Generation模式是用于提取负载每个pin电阻SPICE模型的,结果以spice网表形式展现,仍然以Motherboard.spd为例进行说明。目的是模拟实际情况,via的孔壁电镀1mil,中间是空心的,让via不完全被填充金属成为实心via。Upper/lower Tolerance:上下公差,设置为5%,也就是压降允许的范围。P/F Mode:通过/失败模式,选择Worst,最差的情况。

weixin_54787054的博客 417

shell脚本使用与ssh远程登录配置

shell脚本语法与脚本使用范例,ssh免密登录配置、rsync文件同步等。

sym的博客 3588

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Shell 中 while read 循环执行 ssh 命令为何只循环一次?原因与解决方案

Shell脚本中while read循环内使用ssh时,循环可能只执行一次就退出。这是因为ssh默认会读取标准输入,消耗掉循环的输入管道数据。解决方案包括:1) 使用ssh -n选项;2) 显式重定向ssh输入为/dev/null;3) 避免在管道中使用循环。最推荐的方法是添加-n参数,既简单又能确保ssh不会干扰循环的正常执行。类似问题也适用于其他会读取标准输入的命令。

Mico18的博客 363

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

在Shell脚本中通过ssh从脚本运行函数

因此,为了能够在远程机器上运行脚本中的函数,需要将函数定义先传输到远程机器上,然后再调用这些函数。当你执行这个命令时,它会将本地的 hello_world 函数定义作为字符串传输到远程主机,并在远程主机上执行该函数。cat将以文本形式接收该函数的定义,而$()将在当前shell中执行它,而该shell将成为远程shell中的已定义函数。这个方法就是相当于ssh登录远程主机后,向远程主机发送myFile脚本,然后执行脚本,执行脚本中的f函数,执行完毕后rm删除myFile脚本。否则,您的建议将是最好的。

王轩的博客 3553

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux shell脚本条件循环

Linux shell脚本条件循环

2402_86758333的博客 1069

【shell脚本】修改ssh端口

#!/bin/bash #说明:SSHD服务默认监听端口是22,如果你不强制说明别的端口,”Port 22”注不注释都是开放22访问端口 portset=$1 if [ ! -z "$portset" ];then inputportlen=`echo "$portset"|sed 's/[0-9]//g'` #$portlen为空,说明输入的是一个整数 if [ "$inputportlen" == "" ] && [ "$portset" -gt "1" ] &&

matchbox1234的博客 2020

linux ssh中使用循环,Linux shell脚本使用while循环执行ssh的注意事项

如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了。一、场景还原:我现在是想用一个脚本获取一定列表服务器的运行时间,首先我建立一个名字为ip.txt的IP列表(一个IP一行),再建好密钥实现不用密码直接登录。然后写脚本如下:[code language=”shell”]#!/bin/bashwhile read ips;doecho ip...

weixin_31157123的博客 1152

shell脚本实现ssh登录之后的while循环

脚本功能:ssh远程登录某服务器后查看某个端口是否开启,如果开启就退出,没有的话就打印语句,然后瑞出ssh登录 说明: 远程执行的内容在“<< testtt ” 至“ testtt”之间,在远程机器上的操作就位于其中,注意的点: 1.<< testtt,ssh后直到遇到testtt这样的内容结束,testtt可以随便修改成其他形式。 2. > /dev/null...

Yhappy727的博客 1209

Linux之Shell脚本while循环ssh登录执行命令

包含以下内容

cloud952788的专栏 3097

linux循环脚本while循环,shell 脚本中while 循环只执行一次的问题

之前写过一个批量ssh的脚本,来批量处理一些东西,不过遇到过一个问题就是while循环只执行一次就退出。ssh如今又有人问到,就顺便记录一下,测试脚本以下测试while read line ;ipdoeventssh -p20002 $line -o StrictHostKeyChecking=no xxxxxxxxxseddone < ip.txt循环其中ip.txt里是须要修改东东...

weixin_33740713的博客 1406

shell脚本while只循环一次,后续循环失效

如果这个业务逻辑过这个业务逻辑调用的方法里包含sh命令亦或是ssh命令,他会将后续循环的标准输入当做命令的输入(也就是网上说的会消耗原来提供给循环的标准输入),会导致循环只进行了一次就结束了。解决办法:就是把/dev/null当做标准输入给sh或ssh脚本,其实我自己在使用的时候,ssh命令加上-n参数也是可以解决的。例如:sh test.sh -w 20250807 < /dev/null。shell脚本我们经常会用到。这样循环又起作用了。

xiongshao1943的专栏 536

shell脚本,在循环体中执行ssh命令的问题

cat ./file.txt | grep -v "^#" | while read IP IQ do ssh tomcat@$IP ... .. done 上述代码,当file.txt中的内容超过了2行,那么问题就出现了,第二行的内容并不会读出来。 原因以及解释如下:(来自网络) 在while循环中ssh中断的问题 解决方案,ssh -n    其中-n 于

eclipse_c 的专栏 5474

在本地shell脚本中ssh到远程服务器并执行命令

在本地shell脚本中ssh到远程服务器并执行命令

u011250186的博客 1万+

[实战] 阿里云 Linux 3 安装 GitLab Runner 全踩坑记录:解决 Repo 404 及 SSH 模式报错,最终 Shell 模式完美运行

本文分享了在阿里云服务器(AlibabaCloudLinux3)上部署GitLab Runner的踩坑经验。主要问题包括:1)Yum源404报错,需强制指定os=el和dist=8;2)SSH模式权限和握手问题,建议同服务器部署直接使用Shell模式;3)新版Token注册时参数限制,需在网页端配置tag等参数。文章提供了完整的解决方案,包括正确的注册命令、关键配置步骤和验证方法,帮助开发者避开常见陷阱,快速完成GitLab Runner部署。

gs80140的专栏 1014
上一篇: MyBatis入门
下一篇: java8实战导图
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值