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
ssh
ssh는 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"