데이터베이스의 공개 키가있는 OpenSSH 공개 키가 변경되거나 추가 될 때마다

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

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



답변

나는 스스로 대답하려고 할 때이 질문을 발견했습니다. 몇 가지 검색 및 실험을 한 후 이에 대한 다른 옵션을 찾았습니다. 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에서 공식적으로 지원하는 것보다 훨씬 좋습니다. 또한 스크립트에서 원하는 논리 (데이터베이스와의 대화 포함)를 원하는 언어로 지정할 수 있습니다.


답변

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

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


답변

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


답변