繁体   English   中英

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

[英]Bash Script read hostnames from .txt file and place in variable for ssh

我创建了以下Bash脚本:

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

它会远程进入机器并运行脚本,然后将输出内容放置在file.txt中。现在,我需要手动读取IP地址而不是手动输入IP地址,而要从.txt文件中读取主机名列表并将其放在将替换IP地址的变量中。 一个示例是:ssh username @ Variable,其中每次从包含主机名的文件中读取单词时,“ Variable”都会更改。 任何想法如何去做?

将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文件,其中包含每个命令的结果,并由其主机排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM