SSH 공개 키 복사

SSH 공개 키 복사

스택 오버플로에서 답변을 얻지 못했기 때문에 이 질문이 반복적으로 발생합니다.

공개 키를 다른 서버로 가져오는 간단한 스크립트를 만들려고 합니다.

선택할 수 있는 옵션을 2개 만들었습니다. 하나는 ssh-copy-id를 사용하는 것이고, 다른 하나는 단순히 공개 키를 다른 서버의 파일에 복사하는 것입니다. 두 번째는 잘 작동하지만 ssh-copy-id에서는 작동하지 않습니다. 이것이 내가 지금 가지고 있는 것입니다:

ssh-copy-id -i $var1 $i

$var1은 "/path/to/the/public_key.pub"이고 $i는 txt 파일을 작성하는 서버입니다. 전체적인 아이디어는 내 공개 키가 어디에나 있고 새 관리자의 공개 키를 어디에나 입력하는 것을 좋아한다는 것입니다. 잘 작동하지만 실행할 때 비밀번호를 입력해야 합니다. 모든 솔루션은 비밀번호를 한 번만 입력하면 이를 수행할 수 있습니다. 또한 키를 추가하기 전에 새 줄을 입력하고 싶습니다. 하지만 ssh-copy-id를 사용하여 이를 수행하는 방법에 대한 해결책을 찾을 수 없습니다.

답변1

해결책은 이것입니다.

1) 터미널에서 id_rsa.pub를 복사하려는 모든 호스트/IP 주소가 포함된 배열을 만듭니다. 예를 들어

hosts=( host1 host2 192.168.100.200 host4 )

2) 예상 파일을 생성하고 저장한 후 실행 가능하게 만듭니다.chmod +x filename

#!/usr/bin/expect -f

if { $argc != 4 } {
    puts stderr "usage: ./expt host pass user keyfile"
    exit 2
}

   set host [lindex $argv 0]
   set pass [lindex $argv 1]
   set user [lindex $argv 2]
   set keyfile [lindex $argv 3]

   spawn ssh-copy-id -i $keyfile $user@$host
   expect "assword:"
   send "$pass\n"
   expect eof

3) 이제 호스트를 보유하고 있는 어레이를 반복하여 전송합니다.id_rsa.pub

for host in "${hosts[@]}" ; do ./expt "$host" Y0urPassword username ~/.ssh/id_rsa.pub ; done

공개 키가 모든 호스트에 복사될 때까지 기다립니다.

답변2

자, 드디어 이걸 얻었습니다. 이제 완벽하게 작동합니다. for 루프 뒤의 스크립트에서 다음 줄을 추가합니까?

/usr/bin/expect <<EOD

원하는 프로세스의 조건은 다음과 같습니다. 예를 들면 다음과 같습니다.

spawn ssh-copy-id -i test.pub root@<name_host>
        expect "Enter passphrase for key"
        send "$pass\n"
        expect eof
EOD

그리고 그것은 완벽하게 작동합니다!

설명과 도움에 다시 한번 감사드립니다.

;)

관련 정보