비밀번호를 사용하여 Sudo를 사용하고 SSH를 통해 파일에 첨부

비밀번호를 사용하여 Sudo를 사용하고 SSH를 통해 파일에 첨부

내가하고 싶은 일은 다음과 같습니다.

원격 호스트에 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 비밀번호를 두 번 입력해야 한다는 사실이 마음에 들지 않습니다. 첫 번째는 변수에 저장하고 두 번째는 원격 호스트에 대한 첫 번째 로그인을 계속합니다.

관련 정보