헤드리스 모드에서 비밀번호 변경

헤드리스 모드에서 비밀번호 변경

VPS 설정을 완전히 자동화하는 스크립트를 작성 중인데 루트 비밀번호를 변경해야 합니다. 스크립트는 SSH를 통해 실행되므로 입력을 피하고 싶습니다.

passwd임의의 값을 명령 입력 으로 리디렉션하는 방법이 있습니까 ?

편집하다

비밀번호를 두 번 포함하는 것에 대해 알고 있습니다 passwd < passwd_file.txt. 이 목적으로 임시 파일을 사용하는 것은 다소 서투른 것처럼 보이기 때문에 더 우아한 방법이 있는지 궁금합니다.

답변1

사용 중인 UNIX 버전을 지정하지 않았지만 Linux에서는 passwd(1) 매뉴얼 페이지에 다음과 같이 나와 있습니다.

   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.

따라서 당신이 해야 할 일은 다음을 실행하는 것뿐입니다.

echo 'somepassword' | passwd --stdin

chpasswd추가하도록 편집됨: Red Hat과 Ubuntu 모두에 (적어도) 더 이식 가능한 버전이 존재합니다.

echo 'someuser:somepassword' | chpasswd

매뉴얼 페이지를 참조하십시오.

답변2

하고 싶은 일을 하기가 힘들 것 같아요. 이 passwd명령은 설명하는 상황을 피하기 위해 많은 노력을 기울여 비밀번호 추측 시나리오를 방지하고 많은 잠재적인 보안 문제를 우회합니다.

useradd명령을 사용할 수 있나요 ? 일반적인 Linux에는 useradd다음을 설정할 수 있는 "-p" 또는 "--password" 옵션이 있습니다.암호화됨비밀번호는 특정 값입니다. 이 암호화된 비밀번호는 파일에서 얻을 수 있습니다 /etc/shadow.

또 다른 옵션은 파일을 가지고 장난을 치는 것입니다 /etc/shadow. 그것을 사용 sed하거나 솔트 암호화된 루트 비밀번호를 변경하는 것은 너무 어렵지 않아야 합니다.

답변3

예! 길을 찾았습니다. printf나를 구해줬어요:

HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORD\n$ROOT_PASSWORD\n" | passwd
EOF

이것이 나에게 가장 좋은 방법입니다. 비밀번호가 일반 텍스트로 로컬 원격 호스트에 도달하지 않기 때문에(ssh 연결을 통해서만) 깨끗하고 완벽하게 안전합니다.

답변4

passwd 주위에 tmux를 감쌀 수 있습니다.

tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'\n'
tmux send-keys -t chpwd NEWPASSWORD$'\n'

물론 루트로 실행하십시오.

관련 정보