아래 스크립트를 사용하여 파일(키 포함)을 원격 시스템에 복사하려고 합니다. 그런데 아래와 같은 오류가 발생합니다
/root/.ssh/authorized_keys: 권한이 거부되었습니다.
#!/bin/bash
for i in `cat hosts`
do cat team.keys | sshpass -f pass ssh -t -o "StrictHostKeyChecking no" normal_user@ad@${i} "sudo cat >> /root/.ssh/authorized_keys";
done
-- 해결책을 찾기 위한 제안 사항을 공유해 주세요.
답변1
sudo cat >> /root/.ssh/authorized_keys
이 명령은 여러분이 생각하는 대로 작동하지 않습니다.
일반 사용자로 실행되는 쉘은 명령 실행을 시작하기 전에 리디렉션을 구현합니다 sudo cat
. 따라서 리디렉션은 authorized_keys
루트 파일에 쓸 수 있는 권한 이 없는 루트가 아닌 사용자로 발생합니다 .
표준 해결 방법은 tee
sudo와 함께 명령을 사용하는 것입니다.
#!/bin/bash
for i in $(cat hosts)
do cat team.keys | sshpass -f pass ssh -t -o "StrictHostKeyChecking no" \
normal_user@ad@${i} "sudo tee -a /root/.ssh/authorized_keys >/dev/null"
done
이 버전에서는 as를 실행하는 원격 셸이 normal_user@ad
명령을 as로 실행하고 sudo <some parameters for sudo> >/dev/null
해당 sudo
명령은 루트 액세스 권한을 얻어 실행합니다 tee /root/.ssh/authorized_keys
.
이 tee
명령은 표준 입력에서 파이프로 전달된 키를 받고, 입력의 복사본 하나를 파일에 쓰고 /root/.ssh/authorized_keys
(루트로 실행되기 때문에 가능함), 또 다른 복사본을 표준 출력에 전달합니다. 추가 복사본은 실행된 첫 번째 원격 셸로 반환된 normal_user@ad
다음 /dev/null
.