ホストファイルを使用して複数のサーバーにログインし、稼働時間、ホスト名-I、およびホスト名を実行するスクリプトを作成しようとしています。
これまでのスクリプト
echo"" ;
echo "hostname:" $(ssh $Host hostname) ;
echo "IP:" $(ssh $Host hostname -I) ;
echo "uptime" $(ssh $Host uptime) ;
echo"" ;
私の目標を達成するための最良の方法は何でしょうか?
ターミナルにすべての出力が必要だとすると、次のようになります。
#!/bin/bash
hosts_file=/path/to/file
username=youruser
while read -r Host; do
hostname=$(ssh "${username}@${Host}" hostname)
ip_addr=$(ssh "${username}@${Host}" hostname -I)
uptime=$(ssh "${username}@${Host}" uptime)
echo
{
echo "Hostname:?$hostname"
echo "IP:?$ip_addr"
echo "uptime:?$uptime"
} | column -s\? -t
echo
done <"$hosts_file"
これにより、hosts_fileの各行がループされ、行全体がHost
に割り当てられます。次に、hostname
、ip_addr
、およびuptime
をリモートマシンの対応する結果に設定します。次に、それらの結果を列形式でエコーします。
試してください(hostlist
内のホストに正しい認証が設定されていると仮定します)
while read Host
do { read HN; read IP; read UP; printf "hostname: %s\nIP: %s\nuptime: %s\n" "$HN" "$IP" "$UP"; } <<< "$(ssh $Host "hostname; hostname -I; uptime")"
done < hostlist