SSH 키 관리를위한 조언


13

많은 SSH 키 쌍을 관리하기위한 모범 사례는 무엇입니까?

SSH를 사용하여 집과 직장에서 여러 시스템에 연결합니다. 현재 직장 및 가정 시스템 모두에 대해 상당히 작고 관리 가능한 키 쌍 모음이 있습니다. 혼동을 피할 수 있도록 명명 된 키 쌍을 생성하는 스크립트가 있습니다.

내 홈 네트워크는 랩탑 (우분투), 두 개의 데스크탑 (우분투 / 페도라 듀얼 부팅, 페도라 / 윈도우 듀얼 부팅) 및 미디어 시스템 (우분투)으로 구성되어 있습니다. 직장에는 개인 랩탑 (집에서 일하는 데 사용), 데스크탑 (fedora), 프로덕션 시스템 (RHEL) 및 Windows (sigh) 및 VM (fedora)이있는 랩탑이 있습니다. 지금까지는 모두 좋았습니다.

(저는 홈 키 페어를 내 업무 시스템에 배치하거나 내 업무 키 페어를 내 홈 시스템에 배치하는 데 관심이 없습니다. 또한 개인 키가 프로덕션 시스템에 있어야하는 다른 시스템과의 파일 전송을 자동화하기위한 가상 사용자 계정이 있습니다. 다른 시스템간에 파일을 전송합니다.)

그러나 이제 100 개 이상의 시스템으로 구성된 대규모 클러스터 인 Hadoop과 그 복잡성, 사용자 및 키 쌍이 증가했습니다. 이제 키를 관리해야합니다.

(저는 명확히해야합니다. 저는 Hadoop 클러스터를 배포하는 클라이언트와 상담하는 소프트웨어 개발자입니다. 키를 관리해야합니다. 클러스터에 액세스하는 많은 사람들이있을 것입니다. 공개 키를 시스템에 배치해야합니다. 리눅스 관리자, 그들은 나에게 도움을 요청했다. 나는 시스템 관리자를 고용하라고 조언했지만 그들이 할 때까지 나는 돕는다)

공개 키를 원격 시스템에 게시해야하는 경우 모든 '방법'웹 페이지에서 덮어 쓰기 (>) (기존 키 삭제) 또는 추가 (>>) (기존 키 유지)를 제안합니다. . 그러나 대상 컴퓨터의 각 공개 키를 별도로 보존하고 결합하는 것이 더 좋습니다. 조언을 찾고 있습니다.

많은 키를 관리하는 데 가장 좋은 방법은 무엇입니까?

감사합니다!


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


사용자 또는 호스트 키 쌍에 대해 이야기하고 있습니까? sshfp공개 키의 서명을 DNS에 넣어서 호스트 키 문제를 해결합니다. 사용자 자격 증명의 경우 OpenSSH 인증서를 조사 하거나 Spacewalk 또는 꼭두각시와 같은 것을 사용하여 모든 키 쌍을 중앙 위치에 저장하고 필요에 따라 배포 할 수 있습니다. 새 서버를 클라이언트로 설정 한 다음 최신 버전의 파일을 배포하기 때문에 후자를 원할 것 같습니다.
Bratchley

또 다른 랩탑 (fedora), MyBook Live 네트워크 디스크 (Linux 실행), 하드 드라이브를 기다리는 두 개의 내장 된 데스크톱, 그리고 홈 하둡 클러스터 (학습)를 구축 할 계획 인 두 대가 더 있습니다. 네, 키 관리를 이해해야합니다.
ChuckCottrill

답변:


12

일반적으로 클라이언트 시스템 당 하나 이상의 키를 가져서는 안됩니다 ( "일반적으로"강조 표시). 귀하의 질문을 올바르게 이해하고 있는지 확실하지 않지만 모든 원격 시스템에 대해 별도의 키가 있다고 말하면 분명히 잘못하고 있습니다.

Ssh는 공개 키 암호화를 사용합니다. 원격 시스템에 설치하는 키는 공개 키이므로 다른 곳에서이 키를 재사용해도 전혀 해가 없습니다. 보호되어야하며 개인 시스템에 남아있는 개인 키입니다.

개인 키는 공유하지 않고 한 클라이언트에만 상주하는 것이 좋습니다. 따라서 클라이언트가 손상된 경우 해당 키 하나만 취소 할 수 있습니다.


이제 공개 키를 수백 대의 시스템으로 가져 오는 방법을 묻는다면 몇 가지 방법이 있습니다.

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

다른 방법은 ssh의 새로운 기능을 이용하는 것입니다. 라는 구성 지시어 AuthorizedKeysCommand입니다. 기본적으로 공개 키를 찾아야 할 때마다 sshd가 실행되는 명령입니다. 이 명령은 쿼리중인 사용자의 공개 키를 STDOUT에 작성합니다. 이것은 주로 홈 디렉토리를 마운트하지 않았지만 여전히 중앙 인증 서버를 가지고있을 때 사용됩니다 ( FreeIPA 는이를 활용합니다).

물론 /home중앙 서버에서 cron job rsync와 같은 다른 작업을 수행 할 수 있습니다 . 그러나 이것은 일반적인 관행이 아닙니다.


집에 8 대의 컴퓨터가 있고 클라우드에 다양한 수의 "서버"가 있습니다 (필요에 따라 확장). 최대 300 개의 서버 인스턴스를 확장 할 때 300 개의 클라이언트 키를 갖는 것은 어리석은 일입니다. 그래서 16 개의 공개 키 (8 개의 호스트 당 2 명의 사용자)가 있습니다. 하드 머신의 경우 3 개월마다 키를 누릅니다. 클라우드 인스턴스의 경우 사용자 지정 이미지에 통합됩니다.
Skaperen

2

공개 키를 원격 시스템에 게시해야하는 경우 모든 '방법'웹 페이지에서 덮어 쓰기 (>) (기존 키 삭제) 또는 추가 (>>) (기존 키 유지)를 제안합니다. . 그러나 대상 컴퓨터의 각 공개 키를 별도로 보존하고 결합하는 것이 더 좋습니다. 조언을 찾고 있습니다.

내가 공개 키를 저장하기에 어떤 이점을 볼 수 없습니다 모두.ssh/authorized_keys별도의 파일에.

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

ssh-rsa AAAAB3Nza...LiPk== user@example.net

따라서 * authorized_keys * 파일에서 특정 키 (특정 사용자에게 첨부)를 검사 / 추출 / 삭제하는 것이 매우 쉽습니다.

사용자 ID는 실제로 자유 형식의 "주석"필드이므로 지정된 키를 식별하는 데 필요한 정보를 입력 할 수 있습니다.

어쨌든, 원격 리소스에 액세스해야하는 "사용자"에 대한 키 페어 만 생성해야합니다. 각 hadoop 호스트에서 다른 hadoop 호스트로 로그인 할 필요가 없습니다. 오히려 모든 hadoop 호스트에 액세스해야하는 몇 가지 관리 시스템이 있습니다. 관리 시스템 당 하나의 키 쌍만 있으면되고 모든 공개 키에 각 공개 키를 설치하십시오.


각 사용자는 자신의 키를 생성합니다. 각 사용자는 키 원점의 일부로 username @ hostname을 제공해야한다고 생각합니다. 해당 username @ hostname을 적용하는 스크립트를 제공한다는 의미입니까?
ChuckCottrill

키를 만드는 방법에 따라 다릅니다. 예를 들어 ssh-keygen형태의 주석을 추가합니다 user@host; 퍼티와 함께 ​​제공되는 것과 같은 다른 키 생성기는 그렇게하지 않을 수 있습니다. 그러나 그렇습니다. 각 키에 사용자 / 호스트 조합을 식별하는 주석 필드가 있는지 확인하는 작은 스크립트를 작성하는 것은 쉽지 않습니다.
umläute

1

최근 OpenSSH를 사용하면 LDAP에서 ssh 키를 얻을 수 있습니다. sshd_config 매뉴얼 페이지의 'AuthorizedKeysCommand'를 참조하십시오. 개인적으로 키가 아닌 OpenSSH 인증서를 선호합니다 ( http://blog.habets.pp.se/2011/07/OpenSSH-certificates 참조) . cfengine, 꼭두각시, 요리사, 소금과 같은 구성 관리자를 사용하여 키를 관리 할 수 ​​있습니다.


0

구현하기가 쉽고 여러 사용자를 추가 할 때 좀 더 융통성이있는 다른 방법을 사용하는 것입니다. https://userify.com/

서로 다른 서버 그룹을 정의하고 해당 서버에 대해 다른 사용자의 키를 활성화 또는 비활성화 할 수 있습니다.

매우 간단한 설치 및 관리.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.