Bash脚本从.txt文件中读取主机名,并放在ssh的变量中

时间:2014-08-18 14:47:55

标签: linux macos bash ssh

我创建了一个Bash脚本,如下所示:

File=/library/logs/file.txt
ssh -n username@<ip> "$(< testscript.sh)" > $File 

它将远程进入计算机并运行脚本并将输出放在file.txt中 我现在需要做的是不是手动输入IP地址,我需要从一个来自.txt文件的主机名列表中读取它,并将它放在一个替代ip地址的变量中。一个例子是:ssh username @ Variable,每次从包含主机名的文件中读取一个单词时,“Variable”将会改变。任何想法如何去做?

1 个答案:

答案 0 :(得分:2)

将xargs与-I

一起使用
cat hosts.txt | xargs -I %REPL ssh user@%REPL

-I定义“替换字符串”,在本例中为“%REPL”(但您可以将其设置为您喜欢的)。 然后,将在命令中替换该特定字符串,每行都来自输入。

我喜欢的另一种方式是使用printf

echo -e "host1.com\nhost2.com" | xargs -n1 printf "ssh user@%s -p 999\n"

如果您想在同一个命令中使用更多行,这一点特别棒。想象一下,您在第1行有一个用户名,第2行有主机名。您可以这样做:

xargs -n2 printf "ssh %s@%s -p 999\n" < user_and_host.txt

<强>密码

所有这些,假设您使用的是SSH密钥,因为按设计,openssh客户端不会让您“编写”密码。

如果你想使用密码认证来编写脚本,那么就会有大量的提示和方法(有人会在任何时候大喊“期待”)。但是我在某些时候做了所有这些,他们带来了永恒的痛苦和消化不良

不值得,自己编写脚本。看看我最喜欢的工具:

这将让你几乎做你需要的。给它一个用户名,密码,一个或多个命令来运行+一堆主机/ ip。完成后,您将拥有一个漂亮的CSV文件,其中包含每个命令的结果,由其主机排序。