키를 /root/.ssh/authorized_keys에 복사합니다.

키를 /root/.ssh/authorized_keys에 복사합니다.

아래 스크립트를 사용하여 파일(키 포함)을 원격 시스템에 복사하려고 합니다. 그런데 아래와 같은 오류가 발생합니다

/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루트 파일에 쓸 수 있는 권한 이 없는 루트가 아닌 사용자로 발생합니다 .

표준 해결 방법은 teesudo와 함께 명령을 사용하는 것입니다.

#!/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.

관련 정보