authorized_keys 파일 대신 데이터베이스에서 공개 키를 가져올 수 있습니까?
이러한 설정을 사용하여 공개 키가 변경되거나 추가 될 때마다 authorized_keys 파일을 다시 만들 필요없이 여러 사용자의 git 리포지토리와 같은 ssh 액세스를 관리하고 싶습니다.
authorized_keys 파일 대신 데이터베이스에서 공개 키를 가져올 수 있습니까?
이러한 설정을 사용하여 공개 키가 변경되거나 추가 될 때마다 authorized_keys 파일을 다시 만들 필요없이 여러 사용자의 git 리포지토리와 같은 ssh 액세스를 관리하고 싶습니다.
답변:
나는 스스로 대답하려고 할 때이 질문을 발견했습니다. 몇 가지 검색 및 실험을 한 후 이에 대한 다른 옵션을 찾았습니다. Matt Simmons가 다루었으므로 대안으로 키 배포에 대한 부분을 건너 뛸 것입니다. 또한, 그것이 충분 하지 않은 시간이 있다는 것을 알고 있습니다 . 예를 들어, GitHub 사용자이고 단일 사용자에 대해 수백만 개의 공개 키를 저장해야하는 경우 SSH authorized_keys 파일을 지속적으로 업데이트하고 잠재적으로 수십에서 수백 개의 에지 박스에 걸쳐 동기화 된 상태를 유지하는 것은 불가능하거나 바람직하지 않습니다.
그래서,
우선, RedHat (및 변형)에는 AuthorizedKeysCommand
및 AuthorizedKeysCommandRunAs
옵션 을 추가하는 지원되는 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
경우 새 정책을 올바르게 적용하는 방법에 대해 자세히 알아봐야합니다 .
비슷한 기능을 추가하기 위해 다른 (아마도 덜 테스트되고 신뢰할 수있는) 패치가 있습니다. 예를 들어 openssh-script-auth가 있습니다. RedHat에서 사용한 패치를 찾아서 직접 적용 할 수도 있습니다. 인터넷 검색을 통해 https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch 및 https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch 를 알 수 있습니다. RH 버전을 기반으로하지만 최신 버전의 OpenSSH 용으로 업데이트되었습니다.
OpenSSH를 패치하여 일부 상점에서 직접 키 조회를 수행합니다 (예 : GitHub 및 CodeBaseHQ 등). GitHub는이 패치를 오픈 소스로 공개하지 않았지만 과거에는 MySQL 및 PostgreSQL 키 조회 용 버전을 발견했습니다. 나는 지금 바로 그들을 다시 찾으려고 노력했지만 많은 운이 없었습니다.
FUSE 기반 옵션도 있습니다. 예를 들어 LPKFuse 파일 시스템 에서 위치를 1 로 변경하여 LDAP에서 공개 키를 제공 할 수있는 LPKFuse 가 있습니다 AuthorizedKeysFile
. LPKFuse FS는 컨텐츠가 디렉토리 서버의 필드로 백업되는 가상 파일을 작성합니다.
대체로 옵션 # 1은 RedHat에서 공식적으로 지원하는 것보다 훨씬 좋습니다. 또한 스크립트에서 원하는 논리 (데이터베이스와의 대화 포함)를 원하는 언어로 지정할 수 있습니다.
내가 아는 한 OpenSSH에는이 기능이 없습니다. 가장 좋은 방법은 스크립트가 자동으로 파일을 매일 밤마다 (또는 필요한만큼 자주) 재생하는 것입니다.
또한 다음 질문을보고 싶을 수도 있습니다. SSH 공개 키를 배포하는 시스템