여러 IP 주소에서 ssh를 사용하여 로컬 *nix 시스템에서 출력과 오류를 얻으려면 어떻게 해야 합니까?

여러 IP 주소에서 ssh를 사용하여 로컬 *nix 시스템에서 출력과 오류를 얻으려면 어떻게 해야 합니까?
command="ls -lrt;uname -a;uname -o"
for i in 10.38.227.229 10.38.164.103
do
ssh auto21@$i "$command 2>&1" >> log
#ssh -n auto21@$i "$command" 2> >> log
done

여러 가지 방법을 시도하고 있지만 아무것도 작동하지 않는 것 같습니다. 첫 번째 IP에 대한 원격 출력만 얻습니다.

로그 파일에

답변1

2>&1원격 컴퓨터에서 이 작업을 수행합니다 . 그래서 실제로는 다음을 수행하고 있습니다.

ssh auto21@$1 'ls -lrt;uname -a;uname -o 2>&1' >> log

이는 마지막 명령의 stderr만 리디렉션한다는 의미입니다 uname.

써 내려 가다:

command="ls -lrt;uname -a;uname -o"
for i in 10.38.227.229 10.38.164.103
do
  ssh "auto21@$i" "$command"
done >> log 2>&1

sshssh는 stdout과 stderr을 전송하기 위해 두 개의 채널을 사용하므로 원격 명령 stderr은 stderr 에서 종료됩니다 . 위에서는 전체 루프(및 ssh)의 stderr을 stdout으로 병합했습니다 log.

또는 다음과 같이 작성됩니다.

command="ls -lrt;uname -a;uname -o"
for i in 10.38.227.229 10.38.164.103
do
  ssh "auto21@$i" "{ $command; } 2>&1"
done >> log

즉, 원격 측에서 stderr를 stdout으로 병합하지만 마지막 명령뿐만 아니라 모든 명령에 대해 병합합니다. 또는:

  ssh "auto21@$i" "exec 2>&1; $command"

관련 정보