使用文件的 SSH 脚本

使用文件的 SSH 脚本

我一直在使用以下脚本远程访问我的系统:

#!/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 变量使用大写通常是一个坏主意,因为按照惯例,全局环境变量都是大写的,这可能会因名称冲突而导致意外行为。当您使用标准变量名称(例如 和 )时,这一点尤为重要HOSTNAMEUSERNAME这些名称通常已在环境中定义。

另外,-n这里需要该选项来阻止ssh尝试读取文件的其余部分。如果没有-n,则只有第一次迭代可以工作,因为该ssh命令将消耗其标准输入的其余部分,因此最终会读取整个文件。

相关内容