SSH 키 관리에 대한 권장 사항

SSH 키 관리에 대한 권장 사항

다수의 SSH 키 쌍을 관리하기 위한 모범 사례는 무엇이라고 생각하시나요?

저는 집과 직장 모두에서 여러 시스템에 연결하기 위해 SSH를 사용합니다. 현재 저는 직장과 가정 시스템에 사용하는 상당히 작고 관리 가능한 키 쌍 모음을 보유하고 있습니다. 혼란을 피하기 위해 명명된 키 쌍을 생성하는 스크립트가 있습니다.

내 홈 네트워크는 내 노트북(ubuntu), 데스크톱 두 대(ubuntu/fedora 듀얼 부팅, fedora/windows 듀얼 부팅) 및 미디어 시스템(ubuntu)으로 구성됩니다. 직장에는 개인 노트북(재택근무용), 데스크톱(fedora), 프로덕션 시스템(RHEL), Windows(sigh) 및 가상 머신(fedora)이 설치된 노트북이 있습니다. 여태까지는 그런대로 잘됐다.

(나는 내 ​​홈 키 쌍을 내 작업 시스템에 두거나 내 작업 키 쌍을 내 홈 시스템에 두는 데 관심이 없습니다. 우리는 다른 시스템으로의 파일 전송을 기계화하기 위한 가상 사용자 계정을 가지고 있으며 개인 키는 프로덕션 컴퓨터에 있어야 합니다. 다른 시스템 간에 파일을 전송하기 위해).

그러나 이제 100개 이상의 시스템으로 구성된 대규모 클러스터인 Hadoop이 등장하고 더 많은 사용자와 더 많은 키 쌍이 포함되어 더욱 복잡해졌습니다. 이제 키를 관리해야 합니다.

(명확하게 설명할 필요가 있습니다. 저는 Hadoop 클러스터를 배포하는 클라이언트를 대상으로 컨설팅하는 소프트웨어 개발자입니다. 그들은 키를 관리해야 합니다. 클러스터에 액세스하는 많은 사람들이 공개 키를 시스템에 배치해야 합니다. 상주 Linux 전문가, 그들은 나에게 도움을 요청합니다. 시스템 관리자를 고용하는 것이 좋지만 그렇게 될 때까지는 도와드리겠습니다)

원격 시스템에 공개 키를 게시해야 할 때 모든 "방법" 웹 페이지에서는 덮어쓰기(>)(기존 키 파기) 또는 추가(>>)(괜찮습니다. 기존 키 유지)를 제안합니다. 하지만 제 생각에는 각 공개키를 대상 머신에 따로 저장한 후 결합하는 것이 더 좋을 것 같습니다. 조언을 구하고 있어요.

많은 수의 키를 관리하기 위해 찾은 모범 사례는 무엇입니까?

감사합니다!


편집: 한편으로는 특정 사용자에 대한 해당 CRUD(생성, 읽기, 업데이트, 삭제/비활성화)를 사용하여 많은 시스템에 키를 배치해야 합니다. 즉, 어떤 키가 어떤 사용자에게 속하는지 식별할 수 있어야 합니다.

답변1

일반적으로 클라이언트 컴퓨터당 키가 2개 이상 있으면 안 됩니다("일반적으로" 강조). 귀하의 질문을 올바르게 이해했는지 잘 모르겠지만 각 원격 시스템마다 별도의 키가 있다고 말하면 확실히 잘못하고 있는 것입니다.

SSH는 공개 키 암호화를 사용합니다. 원격 시스템에 설치하는 키는 공개 키이며, 해당 키를 다른 곳에서 재사용해도 아무런 해가 없습니다. 이는 개인 시스템에서 보호하고 보관해야 하는 개인 키입니다.

개인 키를 공유하는 것보다 하나의 클라이언트에만 두는 것도 좋은 생각입니다. 이렇게 하면 클라이언트가 손상된 경우 키를 취소할 수 있습니다.


이제 수백 개의 시스템에 공개 키를 보내는 방법을 묻는 경우 여러 가지 방법이 있습니다.

가장 일반적인 방법은 공유 홈 디렉토리를 사용하는 것입니다. 모든 시스템에 대해 NFS(또는 기타 네트워크 파일 시스템)를 마운트(또는 자동으로 마운트)합니다.

또 다른 접근 방식은 SSH의 새로운 기능을 활용하는 것입니다. 이는 이름이 지정된 구성 지시문입니다 AuthorizedKeysCommand. 기본적으로 이는 공개 키를 찾아야 할 때마다 sshd가 실행하는 명령입니다. 이 명령은 쿼리 중인 사용자의 공개 키를 STDOUT에 기록합니다. 이는 집에 설치되어 있지 않지만 여전히 중앙 인증 서버가 있는 경우에 주로 사용됩니다(리버티 IPA이 점을 이용했습니다).

물론 /home중앙 서버에서 cron 작업을 rsync하는 등의 다른 작업도 수행할 수 있습니다. 그러나 이것은 흔한 일이 아닙니다.

답변2

원격 시스템에 공개 키를 게시해야 할 때 모든 "방법" 웹 페이지에서는 덮어쓰기(>)(기존 키 파기) 또는 추가(>>)(괜찮습니다. 기존 키 유지)를 제안합니다. 하지만 제 생각에는 각 공개키를 대상 머신에 따로 저장한 후 결합하는 것이 더 좋을 것 같습니다. 조언을 구하고 있어요. ㅏ

공개 키를 저장해도 아무런 이점이 없습니다.둘 다.ssh/authorized_keys그리고 별도의 파일에 있습니다.

*authorized_keys* 파일에 저장된 실제 키를 살펴보면 키 출처에 대해 사람이 읽을 수 있는 메타 정보가 이미 포함되어 있음을 알 수 있습니다. 예를 들어 공개 키에는 user@foo일반적으로 다음과 같은 항목이 있습니다.

ssh-rsa AAAAB3Nza...LiPk== [email protected]

따라서 특정 키(특정 사용자에게 첨부됨)를 *authorized_keys* 파일에서 매우 쉽게 확인/추출/제거할 수 있습니다.

사용자 ID는 실제로 자유 형식의 "설명" 필드이므로 주어진 키를 식별하는 데 필요하다고 생각되는 정보를 입력할 수 있습니다.

그럼에도 불구하고 원격 리소스에 액세스해야 하는 "사용자"에 대해서만 키 쌍을 생성해야 합니다. 모든 hadoop 호스트에서 다른 모든 hadoop 호스트로 로그인할 필요는 없을 것입니다. 대신 모든 hadoop 호스트에 액세스해야 하는 몇 대의 관리 컴퓨터가 있습니다. 관리 시스템당 하나의 키 쌍만 필요하며 각 공개 키는 모든 hadoop 호스트에 설치됩니다.

답변3

최근 OpenSSH에서는 LDAP에서 SSH 키를 얻을 수 있습니다. "AuthorizedKeysCommand"를 참조하세요.sshd_config맨 페이지. 개인적으로 저는 키보다는 OpenSSH 인증서를 선호합니다.http://blog.habets.pp.se/2011/07/OpenSSH-certificates. 모든 구성 관리자(예: cfengine, puppet, Chef, salt...)를 사용하여 키를 관리할 수 있습니다.

답변4

구현하기가 매우 쉽고 여러 사용자를 추가하는 데 더 많은 유연성을 갖는 또 다른 방법은 사용하는 것입니다. https://userify.com/

이를 통해 다양한 서버 그룹을 정의하고 이러한 서버에 대한 다양한 사용자에 대한 키를 활성화 또는 비활성화할 수 있습니다.

설치 및 관리가 매우 쉽습니다.

관련 정보