시스템에 사용자 추가 *없는 경우에만 *


47

useradd {user}자동화 된 환경에서이를 실행하려고하지만 시스템이 사용자를 추가 하는 명령을 실행했으며 사용자가 이미 존재하더라도 다시 실행 될 수 있습니다.

사용자가 아직없는 경우에만이를 실행할 수있는 방법이 있습니까? 사용자에게 홈 폴더가 없습니다.


adduser일반적으로 데비안 / 우분투 시스템에서 선호됩니다.
Faheem Mitha

@FaheemMitha 자동 스크립트에서는보다 일관된을 사용하는 것이 좋습니다 useradd.
모자와 사람

답변:


69

id -u somename 사용자가 존재하지 않으면 0이 아닌 종료 코드를 반환합니다.

당신은 그것을 간단하게 테스트 할 수 있습니다 ... ( &>/dev/null정상적인 출력 / 경고를 억제합니다)

id -u somename &>/dev/null || useradd somename 

1
휴대용 방식으로 : "id -u somename> / dev / null 2> & 1 || useradd somename"
Tristan

13

이 시도:

useradd {user} || echo "User already exists."

또는 이것조차도 :

useradd {user} || true

이렇게하면 사용자가 이미있는 경우 안전하게 실패하므로 검사가 저장됩니다.
CoverosGene

8

소수의 시스템 만 가지고 있지 않으면 잘못된 질문을합니다. 대답은 useradd를 전혀 실행하는 것이 아니라 꼭두각시 나 요리사와 같은 구성 관리 솔루션에 맡기는 것입니다. 이를 통해 사용자 정의를 중앙 집중화하고 시스템을 구성하기 위해 for 루프를 실행하고 루트 사용자와 ssh를 사용하지 못하게 할 수 있습니다. 항상 알려진 구성 상태의 시스템이 있습니다.

꼭두각시 문서는 http://docs.puppetlabs.com 에서 수 있습니다.

꼭두각시의 예 :

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}

4
꼭두각시는 훌륭한 프로젝트이지만 OP가 실제로 무엇을 요구하는지에 대해서는 가정 할 수 없습니다.
rahmu

1
OP는 목표를 매우 명확하게 설명했습니다. 자동화되어 있으며 사용자가 존재하더라도 다시 실행할 수 있습니다 (등전위). 구성 관리 도구의 정확한 사용 사례입니다. 누군가가 이러한 문제를 해결하기위한 도구가 이미 존재한다는 것을 모르면, 더 큰 개념이 이해 될 때 매우 구체적이고 좁게 집중된 문제를 해결하는 것과 관련된 질문을하는 경향이 있습니다.
Aaron Brown

이미 Chef를 사용하고 있습니다.
tarnfeld

1
Chef는 사용자가 존재하지 않는 경우에만 사용자를 추가합니다. 그것이 dem 등분입니다. 그래서 나는 질문을 이해하지 못합니다 (1.5 년 전).
Aaron Brown

4

useradd는 이미 존재하는 경우 사용자를 다시 추가하지 않으며, uid 번호와 uid 로그인이 고유한지 확인하려고합니다. 배치를 통해 실행하려는 경우 사용중인 uid가 고유한지 확인하십시오. useradd는 문제가있는 항목에 대해 불만을 표시하므로 오류 / stderr를 캡처하여 계정 시스템 (/ etc / passwd, group, shadow)에 어떤 사용자 계정에 문제가 있는지 확인해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.