로컬 컴퓨터에 지정된 셸 변수를 사용하여 원격 서버에서 텍스트 처리 작업 수행

로컬 컴퓨터에 지정된 셸 변수를 사용하여 원격 서버에서 텍스트 처리 작업 수행

SSH를 통해 원격 서버의 사용자 정보를 처리하는 쉘 스크립트를 작성하려고 합니다. 스크립트는 처리할 사용자를 대화형으로 읽습니다.

  • 내 현재 시도는 다음과 같습니다

    #!/bin/bash
    echo "Enter username which u want to add"
    read Student3
    ssh root@serverIP "useradd $Student3;"
    awk -F: '{print $1, $3, $6, $7}' /etc/passwd | grep "^${Student3}"
    

    빈 출력을 생성합니다.

  • 호출되지 않으면 grep출력은 다음과 같습니다.

    root 0 /root /bin/bash
    bin 1 /bin /sbin/nologin
    daemon 2 /sbin /sbin/nologin
    adm 3 /var/adm /sbin/nologin
    lp 4 /var/spool/lpd /sbin/nologin
    sync 5 /sbin /bin/sync
    shutdown 6 /sbin /sbin/shutdown
    halt 7 /sbin /sbin/halt
    mail 8 /var/spool/mail /sbin/nologin
    operator 11 /root /sbin/nologin
    
  • grep호출을 추가한 후 | grep "^${Student3}"빈 출력이 표시 됩니다.

답변1

추가하려는 사용자가 /etc/passwd위 파일인 경우 로컬로 나타납니다.외딴시스템에서 구문 분석을 사용하려면 다음 을 사용하여 데이터에 액세스 awk해야 합니다 .ssh

#!/bin/bash

read -r -p 'Username: ' user

# Add user and check the remote /etc/passwd file
ssh remote "useradd '$user' && cat /etc/passwd" |
awk -F : -v user="$user" '$1 == user { print $1, $3, $6, $7 }'

마지막 파이프는 다음과 같이 쓸 수도 있습니다.

ssh remote "useradd '$user' && getent passwd '$user'" |
awk -F : '{ print $1, $3, $6, $7 }'

/etc/passwd위 코드의 두 변형 모두 정규식 일치를 사용 하지 않고 대신 전체 사용자 이름의 문자열 비교를 수행하여 이를 방지합니다 ^$user. $user.

관련 정보