我一直在使用以下脚本远程访问我的系统:
#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done
填写HOSTS=变得很繁琐
我想从文本文件中读取主机。我如何修改这个脚本才能使其工作?
谢谢。
答案1
修改非常简单。假设您有一个文件,每行一个主机名,您所需要的只是:
#!/bin/bash
username=someUser
script="pwd; ls"
while read -r hostname; do
ssh -n -l "$username" "$hostname" "$script"
done < "$1"
然后,使用该文件作为参数运行脚本:
script.sh /path/to/hosts/file
请注意,我将您的变量更改为小写。对 shell 变量使用大写通常是一个坏主意,因为按照惯例,全局环境变量都是大写的,这可能会因名称冲突而导致意外行为。当您使用标准变量名称(例如 和 )时,这一点尤为重要HOSTNAME
,USERNAME
这些名称通常已在环境中定义。
另外,-n
这里需要该选项来阻止ssh
尝试读取文件的其余部分。如果没有-n
,则只有第一次迭代可以工作,因为该ssh
命令将消耗其标准输入的其余部分,因此最终会读取整个文件。