제가 하고 싶은 일은 다음과 같습니다.
100개 이상의 호스트를 확인하고 해당 호스트에 파일이 존재하는지 확인하고 싶습니다. 파일이 존재한다면 호스트 이름과 명령 출력을 인쇄하고 싶습니다.
이 예제에서는 3개의 호스트(host1.example.org,host2.example.org,host3.example.org)가 있다고 가정합니다. 파일은 /etc/foobar
host2.example.org에 있지만, host1.example.org 또는 host3.example.org에는 없습니다.
ls -l /etc/foobar
목록의 각 호스트에서 실행하고 싶습니다 .- 이 파일이 해당 호스트에 존재하는 경우 호스트 이름과 명령 출력을 인쇄합니다.
- 해당 호스트에 파일이 없으면 아무 것도 인쇄하지 마십시오. 나는 추가적인 소음을 원하지 않는다.
HOSTLIST="host1.example.org host2.example.org host3.example.org"
for HOST in $HOSTLIST
do
echo "### $HOST"
ssh $HOST "ls -ld /etc/foobar"
done
이상적인 출력은 다음과 같습니다.
### host2.example.org
drwx------ 3 root root 4096 Apr 10 16:57 /etc/foobar
그러나 실제 출력은 다음과 같습니다.
### host1.example.org
### host2.example.org
drwx------ 3 root root 4096 Apr 10 16:57 /etc/foobar
### host3.example.org
나는 host1.example.org 또는 host3.example.org에 대한 행이 인쇄되는 것을 원하지 않습니다.
echo
and 에 의해 생성된 출력을 포함하기 위해 중괄호를 실험하고 있지만 ssh
원하는 작업을 수행하는 마법 구문을 알아낼 수 없습니다. 나는 과거에 제어 문자 없이 이 작업을 수행했다고 확신합니다.
HOSTLIST="host1.example.org host2.example.org host3.example.org"
for HOST in $HOSTLIST
do
# If 'ls' shows nothing, don't print $HOST or output of command
# This doesn't work
{ echo "### $HOST" && ssh $HOST "ls -ld /etc/foobar" ; } 2>/dev/null
done
답변1
이번 호에서는 사용을 권장합니다pssh. 감사합니다 pssh를 사용하면 한 번에 많은 원격 서버에서 명령을 매우 쉽게 실행할 수 있습니다.
호스트를 (예: 호스트_ 파일 )에 넣습니다. 각 서버는 다음과 같이 한 줄로 구성됩니다
.
용법:
pssh -h hosts_file "COMMAND"
당신의 예에서는 그럴 것입니다
pssh -h hosts_file "ls -l /etc/foobar"
답변2
이것은 나에게 효과적이었습니다.
for HOST in $HOSTLIST; do
ssh $HOST '[ -f /etc/passwd ] && echo $(hostname) has file'
done
답변3
set -- host1.example.org host2.example.org
for host; do
ssh "$host" sh -c '[ -e /etc/foobar ] && { printf %s\\n "$1"; ls -ld /etc/foobar; }' _ "$host"
done
답변4
for host in host1 host2 host3 ;do ssh $host 'echo -n "[$(hostname -s)]"; /sbin/ifconfig |grep Bcast' ;done
[host1] inet addr:xxx.xxx.138.30 Bcast:xxx.xxx.143.255 Mask:255.255.248.0 [host2] inet addr:xxx.xxx.138.14 Bcast:xxx.xxx.143.255 Mask:255.255.248.0 [host3] inet addr:xxx.xxx.82.146 Bcast:xxx.xxx.82.255 Mask:255.255.255.128