/etc/shadow
가상 머신 이미지 내부의 루트 비밀번호를 변경하려면 수동으로 편집해야합니다 .
/etc/shadow
비밀번호를 사용하고 표준 출력에서 호환되는 비밀번호 해시를 생성하는 명령 행 도구가 있습니까?
/etc/shadow
가상 머신 이미지 내부의 루트 비밀번호를 변경하려면 수동으로 편집해야합니다 .
/etc/shadow
비밀번호를 사용하고 표준 출력에서 호환되는 비밀번호 해시를 생성하는 명령 행 도구가 있습니까?
답변:
동일한 명령으로 다음 명령을 사용할 수 있습니다.
openssl passwd -6 -salt xyz yourpass
참고 : 전달 -1
하면 MD5 비밀번호, -5
SHA256 및 -6
SHA512 (권장) 가 생성됩니다.
mkpasswd --method=SHA-512 --stdin
방법 수용 md5
, sha-256
그리고sha-512
@tink가 제안했듯이 다음을 사용 chpasswd
하여 비밀번호를 업데이트 할 수 있습니다 .
echo "username:password" | chpasswd
또는로 암호화 된 비밀번호를 사용할 수 있습니다 chpasswd
. 먼저 이것을 사용하여 생성하십시오 :
perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'
그런 다음 나중에 생성 된 비밀번호를 사용하여 업데이트 할 수 있습니다.
echo "username:encryptedPassWd" | chpasswd -e
이 암호화 된 비밀번호는 다음과 같이 비밀번호를 사용하여 새 사용자를 작성하는 데 사용할 수 있습니다.
useradd -p 'encryptedPassWd' username
openssl passwd -1
1) 거기에 끝나지 않고 2) 당신을 위해 무작위 소금을 생성합니다 (쉘 역사에서도 끝나지 않습니다).
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'
- 관련 ServerFault 질문에서
Ubuntu 12.04에는 whois 패키지에서 mkpasswd가 있습니다.
mkpasswd -m sha-512 -S saltsalt -s <<< YourPass
어디:
-m
= TYPE 방법을 사용하여 비밀번호를 계산하십시오. TYPE이 도움이되면 사용 가능한 방법이 인쇄됩니다.-S
= 소금 사용.예 :
$ mkpasswd -m help
-s = Read password from stdin
이 솔루션에는 다음과 같은 이점이 있습니다.
실수를 피하기 위해 암호를 다시 입력하십시오.
$ python3 -c "from getpass import getpass; from crypt import *; \
p=getpass(); print('\n'+crypt(p, METHOD_SHA512)) \
if p==getpass('Please repeat: ') else print('\nFailed repeating.')"
데비안 기반 시스템이없는 사람들. Python3도 잘 작동합니다.
python3 -c 'import crypt; print(crypt.crypt("test"))'
참고 : 문자열 "test"는 암호화 된 문자열로 생성하는 비밀번호입니다.
crypt.mksalt
비밀번호를 생성 할 때 사용 이 작동하지 않습니다 /etc/shadow
. 그러나 @ Alex131089의 방법은 효과가 있습니다!
openssl
있고 매우 보편적 인 도구 이기 때문 입니다.
현재 방법 중 어느 것도 받아 들일 수 없습니다-그들은 명령 줄에서 암호를 전달합니다 (쉘 역사에서 끝남). 추가 유틸리티 ( python3
, makepasswd
) 설치가 필요 하거나 하드 코딩 된 소금을 사용하거나 오래된 해싱 기술을 사용합니다.
이 방법은 암호를 묻는 메시지가 나타난 후 SHA-512 해시를 생성하고 임의의 소금을 사용합니다.
비표준 라이브러리없이 Python 2를 사용하는 방법 :
python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'
프롬프트없이 수행하려면 : (이것은 암호를 명령 기록에 남겨 둡니다)
python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'
ps
명령이 실행되는 순간 에도 여전히 출력에 표시됩니다. (가장 안전한 것은 암호를 요구하는 버전을 사용하는 것입니다)
openssl
와 chpasswd -e
쌍은 RHEL6에서 내 경우에는 작동하지 않았다. 결합 openssl passwd
과 usermod -p
지휘는 일을했다.
솔트 값과 함께 비밀번호의 해시 값을 생성하십시오.
$ openssl passwd -1 -salt 5RPVAd clear-text-passwd43
$1$5RPVAd$vgsoSANybLDepv2ETcUH7.
그런 다음 암호화 된 문자열을 usermod에 복사하십시오. 작은 따옴표로 묶어야합니다.
$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root
섀도 파일에서 확인하십시오.
$ grep root /etc/shadow
root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::
암호를 생성하는 또 다른 방법은 openssl
도구를 사용하는 것 입니다.
MD5 비밀번호 생성
openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/
DES 비밀번호 생성
openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2
u150825와 Gert van den Berg에 대한 비판을 조금 더 확장하면서, 나는 다른 자동화 시스템을 가진 다른 상황에 대해 상대적으로 유연한 무언가가 필요하다는 것을 알았습니다. 나는 유용한 스크립트의 작은 라이브러리에 추가하고 이것을 작성하기로 결정했습니다. python 2.7+의 기본 라이브러리 만 사용하고 python3에서도 작동합니다.
원하는 경우 여기에서 선택할 수 있습니다 . 많이 사용하거나 http로 호스팅하거나 무엇이든 사용해야하는 경우 환경에이를 쉽게 드롭 할 수 있으며 사용 가능한 기본 파이썬 인터프리터가 무엇이든간에 모든 플랫폼에서 실행할 수 있습니다. 확실하게 작동합니다.
기본적으로 stderr에 프롬프트와 함께 getpass를 사용하라는 메시지가 표시되지만 (stdout을 쉽게 캡처 할 수 있음) 문자열을 파이프하면 stdin에서 얻을 수 있습니다. 당신 이이 일을하는 방법에 따라 명령 기록에 표시되지 않을 수도 있으므로 작업중 인 것을 인식하십시오. 저는 10 가지 방법으로 승리하기 위해 패키지 나 파이썬에 한 줄로 의존하지 않고 예상대로 작동하는 유연한 도구를 선호합니다.
chpasswd
?
chpasswd -e
, 문자열 당신에 작은 따옴표를 사용하십시오echo
에서를; 그렇지 않으면$
다른 특수 문자 가 있거나 문자 그대로 처리되지 않습니다.