데이터베이스의 공개 키가있는 OpenSSH


14

authorized_keys 파일 대신 데이터베이스에서 공개 키를 가져올 수 있습니까?

이러한 설정을 사용하여 공개 키가 변경되거나 추가 될 때마다 authorized_keys 파일을 다시 만들 필요없이 여러 사용자의 git 리포지토리와 같은 ssh 액세스를 관리하고 싶습니다.


1
저는 이것을 위해 꼭두각시를 사용하고 있습니다
Matt Simmons

Userify는 중앙 집중식 관리로 로컬 인증을 사용하여 해당 계정을 관리 할 수 ​​있습니다. 이런 방식으로 중앙 집중식 DB가 다운 되어도 계속 액세스 할 수 있지만 중앙 집중식 관리의 모든 이점을 얻을 수 있습니다.
Jamieson Becker

답변:


16

나는 스스로 대답하려고 할 때이 질문을 발견했습니다. 몇 가지 검색 및 실험을 한 후 이에 대한 다른 옵션을 찾았습니다. Matt Simmons가 다루었으므로 대안으로 키 배포에 대한 부분을 건너 뛸 것입니다. 또한, 그것이 충분 하지 않은 시간이 있다는 것을 알고 있습니다 . 예를 들어, GitHub 사용자이고 단일 사용자에 대해 수백만 개의 공개 키를 저장해야하는 경우 SSH authorized_keys 파일을 지속적으로 업데이트하고 잠재적으로 수십에서 수백 개의 에지 박스에 걸쳐 동기화 된 상태를 유지하는 것은 불가능하거나 바람직하지 않습니다.

그래서,

  1. 우선, RedHat (및 변형)에는 AuthorizedKeysCommandAuthorizedKeysCommandRunAs옵션 을 추가하는 지원되는 OpenSSH 패치가 있습니다. 패치는 openssh 6.2에서 업스트림으로 병합되었습니다. 매뉴얼 페이지 에서 인용하려면 :

    AuthorizedKeysCommand

    사용자의 공개 키를 조회하는 데 사용할 프로그램을 지정합니다. 프로그램은 첫 번째 인수로 권한이 부여 된 사용자의 이름으로 호출되며 표준 출력 AuthorizedKeys 행을 생성해야합니다 (sshd (8)의 AUTHORIZED_KEYS 참조). 기본적으로 (또는 빈 문자열로 설정된 경우) AuthorizedKeysCommand가 실행되지 않습니다. AuthorizedKeysCommand가 사용자에게 권한을 부여하지 못하면 권한 부여는 AuthorizedKeysFile로 넘어갑니다. 이 옵션은 PubkeyAuthentication을 설정 한 경우에만 적용됩니다.

    AuthorizedKeysCommandRunAs

    AuthorizedKeysCommand 계정이 실행되는 사용자를 지정합니다. 빈 문자열 (기본값)은 권한이있는 사용자가 사용됨을 의미합니다.

    오늘 밤 실험에서 기본 SELinux 정책으로 인해 작동하지 않는 것으로 나타났습니다. 로 SELinux 시행을 해제하여이 문제를 해결할 수 있습니다 setenforce 0. SELinux를 전환하는 것은 좋지 않은 아이디어 일 수 있으므로 대신 올바른 정책을 생성 할 수 있습니다. 로 간단했다 나의 경우에, 시도 로 로그인 AuthorizedKeysCommand옵션에서 설정 /etc/ssh/sshd_config후 사용 audit2allow -a -M local && semodule -i local.pp. 이것은 기본적으로 감사 로그를 살펴보고 방지 된 사항을 찾아 예외를 생성합니다. 화이트리스트에 올 수있는 다른 내용이있을 가능성이있는 audit2allow경우 새 정책을 올바르게 적용하는 방법에 대해 자세히 알아봐야합니다 .

  2. 비슷한 기능을 추가하기 위해 다른 (아마도 덜 테스트되고 신뢰할 수있는) 패치가 있습니다. 예를 들어 openssh-script-auth가 있습니다. RedHat에서 사용한 패치를 찾아서 직접 적용 할 수도 있습니다. 인터넷 검색을 통해 https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patchhttps://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch 를 알 수 있습니다. RH 버전을 기반으로하지만 최신 버전의 OpenSSH 용으로 업데이트되었습니다.

  3. OpenSSH를 패치하여 일부 상점에서 직접 키 조회를 수행합니다 (예 : GitHub 및 CodeBaseHQ 등). GitHub는이 패치를 오픈 소스로 공개하지 않았지만 과거에는 MySQL 및 PostgreSQL 키 조회 용 버전을 발견했습니다. 나는 지금 바로 그들을 다시 찾으려고 노력했지만 많은 운이 없었습니다.

  4. FUSE 기반 옵션도 있습니다. 예를 들어 LPKFuse 파일 시스템 에서 위치를 1 로 변경하여 LDAP에서 공개 키를 제공 할 수있는 LPKFuse 가 있습니다 AuthorizedKeysFile. LPKFuse FS는 컨텐츠가 디렉토리 서버의 필드로 백업되는 가상 파일을 작성합니다.


대체로 옵션 # 1은 RedHat에서 공식적으로 지원하는 것보다 훨씬 좋습니다. 또한 스크립트에서 원하는 논리 (데이터베이스와의 대화 포함)를 원하는 언어로 지정할 수 있습니다.


다시 : # 1 좋은 찾기 !! ESXi에서 유용 할 것입니다.
Jason Tan

@JasonTan : AuthorizedKeysCommand가 openssh 6.2에서 업스트림되었습니다. 또한 그것을 반영하기 위해 답변을 업데이트했습니다.
Bluewind

큰 대답, 옵션 1은 내가 찾던 것입니다.
셰인 킬 켈리

3

내가 아는 한 OpenSSH에는이 기능이 없습니다. 가장 좋은 방법은 스크립트가 자동으로 파일을 매일 밤마다 (또는 필요한만큼 자주) 재생하는 것입니다.

또한 다음 질문을보고 싶을 수도 있습니다. SSH 공개 키를 배포하는 시스템


1

최신 openssh 버전에서는 사용자 LDAP 항목에 키를 저장할 수 있다고 생각합니다. 계정 관리에 이미 LDAP 또는 AD를 사용하고 있다면 키 관리에도 활용할 수 있어야합니다.

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