ssh의 awk su 명령 대체

ssh의 awk su 명령 대체

호스트에 SSH를 통해 연결하고 모든 사용자 계정과 만료 시기를 인쇄하는 스크립트를 만들고 있습니다.

실행할 수 있는 호스트에서는 awk -F':' '{ print $1}' /etc/passwd모든 사용자 계정 목록이 제공됩니다.

서버로 전송해야 하는 스크립트에 이것을 추가하고 이 목록을 생성하여 만료되면 인쇄하는 데 사용합니다.

#!/bin/bash

for i in `cat /admin/lists/testlist`
do
  echo $i
  UNAME=`su - admin -c "ssh $i uname"`

  if test "$UNAME" = "Linux"
  then
    LIST=`su - admin -c "ssh $i awk -F':' '{ print $1}' /etc/passwd"`
    for j in $LIST
    do
      echo "$j " ; `su - batch -c "ssh $i sudo chage -l $j | grep Account"`
    done

  else
    echo "Exiting. The OS type is not found."
  fi

  echo "========================================================================"
  echo " "
done

exit 0

내가 겪고 있는 문제는 스크립트를 실행할 때 다음 오류가 발생한다는 것입니다.

[admin@testserver bin]$ sudo checkPasswdExpiration.sh
testserver02
awk: cmd. line:1: {
awk: cmd. line:1:  ^ unexpected newline or end of string
========================================================================

이 스크립트에서 awk 명령이 작동하지 않는 이유는 무엇입니까?

답변1

첫 번째 따옴표 세트는 for 명령줄에서 사용되고 su두 번째 따옴표 세트는 for 명령줄에서 사용되므로 ssh따옴표는 { print $1}실제로 세 개의 개별 인수로 처리됩니다 awk. 이스케이프 따옴표(그리고$및 사용할 수 있는 기타 특수 문자):

su - admin -c "ssh $i awk -F: \'{ print \$1}\' /etc/passwd"

또는:

su - admin -c "ssh $i getent passwd" | awk -F: '{print $1}'

관련 정보