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'
물론 루트로 실행하십시오.