【问题标题】:ssh to another machine using while loop使用 while 循环 ssh 到另一台机器
【发布时间】:2018-03-29 03:53:01
【问题描述】:

我尝试过 ssh 到多个虚拟机。我用for循环。我想获取用户名和 IP 并循环到多个虚拟机中。

export IFS=","
for read f1 f2 in $(cat sample.txt);
do sshpass -p 'password' ssh $f1@$f2 "uname -a" ;
done

sample.txt 包含

abc,111.111.111.111

定义,111.222.333.444

看起来我遇到了一个错误, 意外标记附近的语法错误f1' for read f1 f2 in $(cat LNodeInput.txt);' 我也尝试了其他几种方法,但仍然抛出错误。

【问题讨论】:

  • for 那样不行,换成while 你会非常接近。祝你好运。

标签: linux shell ssh


【解决方案1】:
#!/bin/bash
while IFS="," read -r f1 f2
do
 sshpass -p 'password' ssh "$f1@$f2" "uname -a" < /dev/null ;
done < sample.txt

注意sample.txt的最后一行应该是空行,否则它不会读取它的最后一行。

编辑:

&lt; /dev/null 是阻止 ssh “吃”来自sample.txt 的输入。否则,该命令只会ssh 到第一台服务器。

【讨论】:

  • 有效!!但它显示第一个IP的uname,不知道为什么它显示下一个IP的输出。有什么建议么? @user8470034
  • @Anna 对不起,我没明白你的意思。你的意思是它只显示一个结果?
  • 如果是这样,你的文件是否只有2条记录? sample.txt 文件末尾是否有多余的空行?请注意这一点(正如我在回答中提到的)
  • 是的,我添加了空行。是的,它只显示一个结果 - 第一个 IP 的 unname 而不是第二个 IP。为了更加确定我手动尝试了它并且它有效。代码好像没有获取到下一台机器的IP。
  • 是的,明白了!但是面对权限被拒绝,请稍后再试。手动测试,它工作了
【解决方案2】:
for a in `cat servers`;do echo ;echo $a ; sshpass -p 'password'  ssh $a uname ; done

像这样,你可以在完成之前添加任何你想要的东西。如果你想在文件中收集输出,请在末尾添加 > file1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    相关资源
    最近更新 更多