명령은 로컬에서는 작동하지만 원격에서는 실패합니다.

명령은 로컬에서는 작동하지만 원격에서는 실패합니다.

SSH 또는 pdsh를 통해 원격으로 명령을 사용할 때 명령이 실패하는 이유를 이해할 수 없습니다.

로컬에서는 다음과 같이 작동합니다.

line=` last -F | grep -vE '^(svc_qual|s594998a|reboot|s823850a|s825722a|s559857a|s603256a|root|s823656a|s230281a|s638181a|s835786a)' | head -1 `;login=`echo $line | awk '{print $1}'`dm;user=`getent passwd $login` ;echo $line ; echo $user

그러나 원격에서는 실패합니다.

ssh User@Server " line=`last -F | grep -vE '^(svc_qual|s594998a|reboot|s823850a|s825722a|s559857a|s603256a|root|s823656a|s230281a|s638181a|s835786a)' | head -1 `;login=`echo $line | awk '{print $1}'`dm;user=`getent passwd $login` ;echo $line ; echo $user  "

나는 또한 pdsh를 사용해 보았습니다.

/opt/techunix/bin/pdsh.sh -f /tmp/vmod/servers -c "line=`last -F | grep -vE '^(svc_qual|s594998a|reboot|s823850a|s825722a|s559857a|s603256a|root|s823656a|s230281a|s638181a|s835786a)' | head -1 `;login=`echo $line | awk '{print $1}'`dm;user=`getent passwd $login` ;echo $line ; echo $user"

답변1

로컬 셸에서 해석하지 않으려는 문자를 이스케이프해야 합니다. 예: "`" 그리고"$"

바꾸다:

ssh User@Server " line=`last -F | grep -vE '^(svc_qual|s594998a|reboot|s823850a|s825722a|s559857a|s603256a|root|s823656a|s230281a|s638181a|s835786a)' | head -1 `;login=`echo $line | awk '{print $1}'`dm;user=`getent passwd $login` ;echo $line ; echo $user  "

하다:

ssh User@Server " line=\`last -F | grep -vE '^(svc_qual|s594998a|reboot|s823850a|s825722a|s559857a|s603256a|root|s823656a|s230281a|s638181a|s835786a)' | head -1 \`;login=\`echo \$line | awk '{print $1}'\`dm;user=\`getent passwd \$login\` ;echo \$line ; echo \$user  "

전체 ssh 명령 주위에 작은따옴표를 넣을 수도 있습니다. 그런 다음 awk및 명령 grep에 대해 작은따옴표를 큰따옴표로 변경 하면 됩니다.

ssh User@Server ' line=`last -F | grep -vE "^(svc_qual|s594998a|reboot|s823850a|s825722a|s559857a|s603256a|root|s823656a|s230281a|s638181a|s835786a)" | head -1 `;login=`echo $line | awk "{print $1}"`dm;user=`getent passwd $login` ;echo $line ; echo $user  '

관련 정보