
내가하고 싶은 일은 다음과 같습니다.
원격 호스트에 SSH로 연결합니다.
로그인한 사용자의 Authorized_keys 파일에 있는 public_keys를 모든 사용자의 .ssh/authorized_keys 파일에 추가합니다.
한 줄에 비밀번호를 사용하여 sudo & cat을 시도하는 데 문제가 있습니다. 이 문제를 해결하는 방법을 아는 사람이 있나요?
내가 이것을 달성하기 위해 노력하는 방법 중 하나입니다.
ssh -t $userHost -p $remotePort \
"for localUser in $(ls /home | grep -v $USER); \
do sudo mkdir -p /home/$localUser/.ssh && \
cat /home/$USER/.ssh/authorized_keys | sudo tee --append \
/home/$localUser/.ssh/authorized_keys > /dev/null; done"
그러나 sudo 명령은 ssh 명령으로 작동하지 않는 것 같습니다. sudoers 파일의 NOPASSWD는 옵션이 아닙니다.
답변1
sudo
비밀번호를 사용하려면 tty
원격 명령 실행이 할당되지 않습니다 tty
. 따라서 허용하지 않으면 작동하지 않습니다 NOPASSWD
.
대신 스크립트를 셸로 사용하고 명령을 실행하는 스크립트를 사용하여 원격 서버에 강제 계정을 갖는 것을 고려하십시오. 키 기반 인증을 사용하여 강제 계정에 로그인하면 비밀번호를 두 번 입력하지 않고 자동으로 스크립트를 실행할 수 있습니다. 스크립트의 마지막 줄에서 exit
로그아웃 명령을 실행합니다. 이는 기본적으로 대화형 세션이므로 tty
비밀번호를 입력할 수 있으며 입력해야 하는 키 입력 횟수는 동일하게 유지됩니다.
내가 모르는 sudo의 새로운 기능이 없으면 다른 방법은 생각할 수 없습니다.
답변2
이것이 내가 해결한 방법입니다.
#!/bin/bash
userHost="[email protected]"
remotePort="1234"
password="password"
# Send public key to remote host
echo "Sending public key to remote host..."
cat "$HOME/.ssh/id_rsa.pub" | ssh $userHost \
-p $remotePort "cat >> ~/.ssh/authorized_keys"
# Add the public key to all users on the remote system
ssh $userHost -p $remotePort 'echo '"$password"' | sudo -S \
ls /home/ && for localUser in $(ls /home | grep -v $USER); \
do sudo mkdir -p /home/$localUser/.ssh && \
sudo touch /home/$localUser/.ssh/authorized_keys && \
sudo chown "$localUser:$localUser" /home/$localUser/.ssh/authorized_keys && \
cat /home/$USER/.ssh/authorized_keys | sudo tee \
--append /home/$localUser/.ssh/authorized_keys > /dev/null; done'
echo '"$password"' | sudo -S ls /home/
먼저 표준 입력에서 읽고 원격 호스트의 비밀번호를 캐시하기 위해 가비지 명령을 사용했습니다 . 그런 다음 나머지 sudo 명령을 계속 실행합니다.
매우 혼란스러운 oneliner이지만 어쨌든 이 스크립트는 원격 호스트당 한 번만 실행되도록 고안되었습니다.
SSH 비밀번호를 두 번 입력해야 한다는 사실이 마음에 들지 않습니다. 첫 번째는 변수에 저장하고 두 번째는 원격 호스트에 대한 첫 번째 로그인을 계속합니다.