web-dev-qa-db-ja.com

稼働時間スクリプトヘルプ

ホストファイルを使用して複数のサーバーにログインし、稼働時間、ホスト名-I、およびホスト名を実行するスクリプトを作成しようとしています。

これまでのスクリプト

echo"" ; 
echo "hostname:" $(ssh $Host hostname) ;
echo "IP:" $(ssh $Host hostname -I) ;
echo "uptime" $(ssh $Host uptime) ;
echo"" ;

私の目標を達成するための最良の方法は何でしょうか?

2
jabur

ターミナルにすべての出力が必要だとすると、次のようになります。

#!/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に割り当てられます。次に、hostnameip_addr、およびuptimeをリモートマシンの対応する結果に設定します。次に、それらの結果を列形式でエコーします。

1
jesse_b

試してください(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
0
RudiC