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
.