호스트 파일을 사용하여 여러 서버에 로그인하고 가동 시간, 호스트 이름-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