ホストファイルを使用して複数のサーバーにログインし、稼働時間、ホスト名-I、およびホスト名を実行するスクリプトを作成しようとしています。
これまでのスクリプト
echo"" ;
echo "hostname:" $(ssh $HOST hostname) ;
echo "IP:" $(ssh $HOST hostname -I) ;
echo "uptime" $(ssh $HOST uptime) ;
echo"" ;
私の目標を達成するための最良の方法は何ですか?
答え1
端末からすべての出力が欲しいとしましょう。
#!/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"
これは、ホスト_ファイルの各行を繰り返すことで、行全体をに割り当てますhost
。次に、、、およびhostname
をリモートシステムの対応する結果にip_addr
設定します。uptime
その後、これらの結果を列形式で再表示します。
答え2
試してみてください(ホストに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