원격 컴퓨터의 개인 키 솔루션?

원격 컴퓨터의 개인 키 솔루션?

크론, 통합 작업, 배포, 백업 등의 서비스를 제공할 수 있는 여러 서버를 관리해야 합니다. 이들 모두의 공통점은 때때로 다른 서버에 대한 액세스가 필요하다는 것입니다.

질문: 나는 명백한 이유로 내 개인 키를 이러한 모든 서버에 전파하고 싶지 않습니다.

저는 프록시 전달과 keychain.sh를 좋아하지만 이를 위해서는 항상 이러한 서버에 연결되어 있어야 합니다.

이 문제에 대한 해결책은 개인 키를 하나의 서버에만 배치한 다음 모든 원격 서버에 대한 연결을 열어두는 것입니다(tmux/screen 사용). 그러나 그것은 이상적이지 않습니다.

또 다른 해결책은 개인 키에 매우 강력한 암호를 입력하고 이를 실제로 이러한 서버에 배포하는 것일 수도 있지만, 이 역시 이상적이지는 않습니다.

제가 간과한 다른 옵션이 있나요?

답변1

이 작업을 수행하는 두 가지 키 없는 방법과 암호 없는 방법을 생각할 수 있지만 둘 다 최적은 아닙니다. 섹션 후에는 SSH 키를 사용하여 이 작업을 수행하는 것이 얼마나 쉬운지 보여 드리겠습니다.

방법 1:NFS 또는 이와 유사한 것. 공통 파일 시스템을 사용하면 파일을 개인 영역에 덤프한 다음 cron 작업을 통해 관련 시스템에서 검색할 수 있습니다. 그러나 이는 네트워크 파일 시스템만큼만 안전합니다.

방법 2:로그인. SSH는 서로 다른 시스템에서 동일한 사용자 이름과 비밀번호(그리고 솔트?)를 가진 사용자가 비밀번호(또는 키) 없이(기본적으로 /etc/shadow그리스어 값의 해시를 증거로 사용하여) 시스템 간에 직접 연결할 수 있다는 점에서 RSH로부터 많은 것을 상속받습니다. . SSH를 사용하여 이 작업을 쉽게 수행할 수 있는지 잘 모르겠고, 불행히도 설정 방법에 대한 가이드도 없습니다.


적절한 보안을 위해서는 각 서버에 개인 키가 필요합니다. 댓글에서 이 모든 것을 유지하고 싶지 않다는 것을 보았지만 대체로 피할 수 없는 일입니다. 개인 키를 생성하고 삭제하는 것은 액세스 권한이 필요한 시스템 에 추가하는 authorized_keys것처럼 쉬워야 합니다.

수백 개의 시스템에 대해 이야기하고 있더라도 개인 시스템에서 다음과 같은 방식으로 키 생성을 스크립트로 작성할 수 있습니다(이는 개인 시스템에서 루트 액세스 권한이 있다고 가정합니다).

cd /tmp
mkdir .ssh
chmod 700 .ssh
for server in node{1..100}; do
  echo "Generating key for $server..."
  ssh-keygen -t rsa -b 4096 -C "root@$server" -k .ssh/id_rsa
  cat .ssh/id_rsa.pub >> authorized_keys
  scp -pr .ssh root@$server:
  rm .ssh/id_rsa*
  sleep 1
done
for server in node{1..100}; do
  cat authorized_keys |ssh root@$server "cat >> .ssh/authorized_keys"
done

sleep 1이 키는 모두 동일한 시스템에서 생성되기 때문에 이것을 사용합니다 . 이는 더 많은 임의성을 확보하기 위한 온전성 검사입니다. 인증된 키 목록을 공유하려면 각 공개 키가 필요하므로 두 개의 루프가 필요합니다.

이제 node1부터 node100까지 이름이 지정된 100개의 서버가 있으며 각 서버에는 다른 모든 서버에 대한 루트 액세스 권한을 부여하는 키가 있습니다.

(저는 사용자가 루트로 로그인하도록 허용하는 것을 옹호하지 않습니다. 이 sudo도구는 더 큰 제어와 책임을 제공합니다. 위 스크립트가 올바르게 작동하려면 각 노드에서 루트의 Authorized_keys에 pubkey를 추가해야 합니다. 그렇지 않으면 sudo 액세스가 필요 NOPASSWD하고 make 내 코드를 일부 수정했습니다(예 scp -pr .ssh $server:/tmp && ssh $server "sudo chown root:root /tmp/.ssh && sudo mv /tmp/.ssh /root/": ).

관련 정보