대화식이없는 명령 행에서 Linux의 사용자 비밀번호를 변경할 수 있습니까?


15

대화 형 작업없이 단일 명령으로 사용자 암호를 실제로 변경하고 싶은 특정 사용 사례가 있습니다. 이것은 SSH를 통해, 그리고 한 명의 사용자 만 로그인 할 수있는 시스템에서 안전한 방식으로 수행되므로 명령 줄에 새 비밀번호 (필요한 경우 이전 비밀번호까지)를 공개하는 것이 좋습니다. FWIW, 우분투 시스템입니다.

이 작업 하나에 만이 시스템에 Expect와 유사한 것을 추가하지 않아도됩니다.


3
FreeBSD에서 이것을하고 싶은 사람들을 위해 :echo "newpassword" | pw usermod theusername -h 0
Paul Hoffman

답변:



5

옵션 usermod과 함께 사용 -p하여 실제 비밀번호가 아닌 비밀번호 해시를 제공 할 수 있습니다 . mkpasswd -m sha-256또는 같은 것을 사용하여 비밀번호 해시를 생성 할 수 있습니다mkpasswd -m md5


1
...하지만 AIX 시스템에는 usermod: '(-질문에 태그를 수정하겠습니다.
voretaq7

3

확실한.

  1. 로컬 시스템에서 비밀번호를 해시하십시오.
  2. 원격 컴퓨터 (비밀번호를 변경하려는 위치)에 연결
  3. 소재에 해시 암호 및 사용자 이름을 공급 sed시스템 암호 파일을 업데이트 스크립트 ( /etc/shadow, /etc/master.passwd, 될 일이 무엇이든).

1

passwd유틸리티에는 --stdin 옵션이 있습니다.

이 옵션은 passwd가 표준 입력 (파이프 일 수 있음)에서 새 비밀번호를 읽어야 함을 표시하는 데 사용됩니다.

통사론:

echo "newpass" | passwd --stdin user1

신경 쓰지 않는다고 언급했지만 암호를 텍스트 파일에 넣은 다음 cat pass.txtecho 명령 대신 bash 기록에 표시되지 않도록 할 수 있습니다.


그게 하나입니다. echo VerySecret | passwd --stdin username
MadHatter

5
내 우분투 시스템에는 --stdin옵션 이 없습니다 passwd.
Jeff Ferland

당신 말이 맞아요 CentOS 시스템과 Mac 모두에서 확인했으며 --stdin 옵션이 있으므로 시스템을 제거하는 것이 Ubuntu 일 것입니다.
Safado

1
@RyanM. FreeBSD의 (그리고 AFAIK NetBSD에와 오픈 BSD, AIX, HP-UX 및 Solaris 마지막 I의 checke)는 지원하지 않습니다 --stdin중 하나 - 그것은 :-) 일이 기다리고 큰 거대한 보안 구멍입니다 주로하기 때문에
voretaq7

1
@quanta : 또는 echo "newpass" | passwd --stdin user1공백으로 줄을 시작하십시오 . 그렇게하면 배쉬 히스토리에 전혀 가지 않을 것입니다.
Janne Pikkarainen

1

경우 --stdin옵션이 작동하지 않습니다 우리는 기본적으로 두 가지 옵션을 사용할 수 있습니다 :

  1. chpaswd스크립트에서 호출 된 다른 유틸리티를 사용 하십시오.
  2. 또는 사용 echo "current_password\nnew_password\nnew_password" | passwd user_name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.