사용자의 공개 SSH 키를 여러 호스트에 배포하는 가장 좋은 방법은 무엇입니까?

사용자의 공개 SSH 키를 여러 호스트에 배포하는 가장 좋은 방법은 무엇입니까?

분명히 사용자가 SSH 액세스가 필요한 모든 호스트에 대한 키를 scp할 수 있습니다. 그러나 호스트가 많으면 시간이 오래 걸릴 수 있습니다. 특히 공개 키 인증이 설정되지 않은 경우 모든 scp에서 비밀번호를 묻습니다. 이는 매우 시간이 많이 걸리고 짜증나는 일이 될 수 있습니다.

자동 마운트된 홈 디렉토리를 사용하면 이 문제가 해결됩니까? 그러면 각 호스트는 각 사용자에 대해 동일한 홈 디렉터리를 사용하므로 공개 키는 한 번만 복사하면 됩니다. 그러나 이것은 옳지 않은 것 같습니다. 누구든지 나에게 조언을 해줄 수 있습니까?

답변1

이를 수행하는 방법은 여러 가지가 있으며, 특히 최신 버전의 OpenSSH를 사용하는 경우 더욱 그렇습니다. 또한 키를 추가하는 방법뿐만 아니라 제거하는 방법도 필요하다는 점을 기억하세요. 키가 손상되었는지, 사람들이 불만을 품고 있는지 등을 빠르게 생각해 보세요. 퍼지는 데 하루가 걸리는 주요 추가 사항은 짜증납니다. 전파하는 데 하루가 걸리는 키를 삭제하는 것은 심각한 보안 문제입니다.

손쉬운 제거의 중요성을 염두에 두고 다음과 같은 몇 가지 제안 사항을 제시합니다.

  1. 사용자를 생성하는 빠른 방법이 이미 있는 것 같습니다. 예를 들어 LDAP일 수 있습니다. LDAP는 구성 옵션을 사용하여 sshd에 연결할 수 있는 SSH 공개 키를 저장할 수 있습니다 AuthorizedKeysCommand. 예를 들어, SSSD를 실행 중인 경우 sss_ssh_authorizedkeys이는 이 목적을 위한 것입니다. (예를 들어 다음을 참조하세요.SSSD 인증 키에 대한 RedHat 문서). 키 추가 및 삭제는 즉각적으로 이루어질 수 있으며, 최악의 경우 LDAP 전파에는 일반적으로 몇 초가 걸립니다. 관리자 개입 없이 이를 완전히 자동화할 수 있습니다(사용자 그룹이 있는 경우 이미 사용자 그룹이 있을 것입니다!).

  2. 서버가 오프라인으로 인증을 처리해야 하는 경우(SSSD의 기능을 벗어남) 또 다른 접근 방식은 OpenSSH에서 CA(인증 기관) 지원을 사용하는 것입니다. 이는 주로 다음과 같이 기록됩니다.ssh-keygen 맨페이지의 "인증서" 섹션. 기본적으로 CA를 신뢰하고 업데이트된 해지 목록을 자동으로 받도록 서버의 sshd를 설정합니다. 그런 다음 해당 CA를 사용하여 클라이언트의 공개 키에 서명하고 클라이언트에 인증서를 제공합니다. 이 시점에서 클라이언트는 해당 인증서를 사용하여 모든 서버에 로그인할 수 있습니다. 클라이언트의 인증을 취소하려면 해당 클라이언트를 취소 목록에 추가하십시오(이 바로 다음에 나오는 매뉴얼 페이지에 설명된 대로). 키 추가는 즉시 이루어지며, 제거는 해지 목록을 업데이트하는 빈도에 따라 달라집니다. 불행히도 SSH CA에는 OCSP만큼 좋은 것이 없습니다. 추가된 자동화는 관리자의 도움 없이 안전하게 구현될 수 있습니다.

  3. ~/.ssh/authorized_keys모든 서버가 동일한 홈 디렉토리를 볼 수 있도록 제안한 대로 공유 자동 마운트(또는 영구 마운트, 자동 마운트가 필요하지 않음) 홈 디렉토리를 사용할 수 있습니다.많은공유가 필요하지 않은 경우 $HOME키 추가 및 제거는 캐시에 따라 즉각적이거나 상당히 빠릅니다. 키 관리는 관리자가 아닌 사용자가 전적으로 수행할 수 있습니다.

    3b.울리히 슈바르츠사용자 인증 키 파일의 위치를 ​​변경할 수 있음을 나타냅니다. 이는 필수 사항이 아닙니다 ~/.ssh/authorized_keys. 따라서 홈 디렉터리를 완전히 공유하는 오버헤드 없이 모든 사용자 인증 키 파일이 포함된 디렉터리를 공유할 수 있습니다.

  4. @DopeGhoti가 제안한 대로 구성 관리 도구를 사용할 수 있습니다. 호스트, 특히 키가 수동으로 추가된 호스트를 잊지 않도록 주의하십시오. 이는 키를 추가하고 삭제하려면 관리자의 수동 개입이 필요함을 의미할 수 있습니다.

답변2

안시푸르ssh보안 셸 키를 배포하는 것처럼 간단한 작업을 위해 구성 가능한 호스트 집합 또는 호스트 하위 집합에서 특정 명령(또는 플레이북)을 실행하도록 설계된 무료 기반 원격 시스템 관리 솔루션 입니다 .

답변3

호스트를 사용하여 파일을 만듭니다.

$ vim server.list
server1.ru
server2.ru
192.168.0.100
192.168.0.101
...

SSHPass를 설치합니다:

# apt-get install sshpass

SSH 복제를 위한 간단한 스크립트를 만듭니다.

$ vim script.sh
#!/bin/bash
while read -r line
do
    echo "running $line"
    sshpass -p sshPassword ssh-copy-id userName@$line -o "StrictHostKeyChecking no"
done < "server.list"

스크립트를 실행합니다:

$ sh script.sh
running server1.ru
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1
running server2.ru
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

원천

관련 정보