InfoGrab Docs

SSH 키 빠른 조회

요약

사용자 수가 증가하면 OpenSSH가 사용자 인증을 위해 authorized_keys 파일을 선형 검색하므로 SSH 작업이 느려집니다. authorized_keys 파일을 사용하는 대신 GitLab Shell을 SSH 키 조회에 사용하도록 구성할 수 있습니다.

사용자 수가 증가하면 OpenSSH가 사용자 인증을 위해 authorized_keys 파일을 선형 검색하므로 SSH 작업이 느려집니다. 이 프로세스는 상당한 시간과 디스크 I/O가 필요하여 리포지터리에 push 또는 pull하려는 사용자에게 지연을 발생시킵니다. 사용자가 키를 자주 추가하거나 제거하면 운영 체제가 authorized_keys 파일을 캐시하지 못할 수 있으며, 이로 인해 반복적인 디스크 읽기가 발생합니다.

authorized_keys 파일을 사용하는 대신 GitLab Shell을 SSH 키 조회에 사용하도록 구성할 수 있습니다. 조회가 GitLab 데이터베이스에서 인덱싱되므로 더 빠릅니다.

Note

표준(비배포 키) 사용자의 경우 SSH 인증서 사용을 고려하세요. 데이터베이스 조회보다 빠르지만 authorized_keys 파일의 직접적인 대체는 아닙니다.

Geo에는 빠른 조회가 필요합니다#

Cloud Native GitLab과 달리 기본적으로 Linux 패키지 설치는 git 사용자의 홈 디렉터리에 있는 authorized_keys 파일을 관리합니다. 대부분의 설치에서 이 파일은 /var/opt/gitlab/.ssh/authorized_keys에 있습니다. 다음 명령을 사용하여 시스템에서 authorized_keys를 찾으세요:

getent passwd git | cut -d: -f6 | awk '{print $1"/.ssh/authorized_keys"}'

authorized_keys 파일에는 GitLab에 액세스할 수 있는 사용자의 모든 공개 SSH 키가 포함되어 있습니다. 그러나 단일 진실 공급원을 유지하려면 Geo가 데이터베이스 조회로 SSH 지문 조회를 수행하도록 구성해야 합니다.

Geo를 설정할 때 기본 및 보조 노드 모두에 대해 아래 단계를 따라야 합니다. 데이터베이스 복제가 작동 중인 경우 보조에 자동으로 반영되므로 기본 노드에서 authorized keys 파일에 쓰기를 선택하지 마세요.

빠른 조회 설정#

GitLab Shell은 GitLab 데이터베이스에 빠르고 인덱싱된 조회로 SSH 사용자를 인증하는 방법을 제공합니다. GitLab Shell은 SSH 키의 지문을 사용하여 사용자가 GitLab에 액세스할 권한이 있는지 확인합니다.

다음 SSH 서버에서 빠른 조회를 활성화할 수 있습니다:

각 서비스에 별도의 포트를 사용하여 두 서비스를 동시에 실행할 수 있습니다.

gitlab-sshd와 함께#

gitlab-sshd를 설정하려면 gitlab-sshd 문서를 참조하세요. gitlab-sshd를 활성화한 후 GitLab Shell과 gitlab-sshd는 자동으로 빠른 조회를 사용하도록 구성됩니다.

OpenSSH와 함께#

필수 요건:

  • AuthorizedKeysCommand가 지문을 허용해야 하므로 OpenSSH 6.9 이상이 필요합니다. 버전을 확인하려면 sshd -V를 실행하세요.
  • 관리자 액세스.

OpenSSH로 빠른 조회를 설정하려면:

  1. sshd_config 파일에 다음을 추가하세요:

    Match User git    # Apply the AuthorizedKeysCommands to the git user only
      AuthorizedKeysCommand /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell-authorized-keys-check git %u %k
      AuthorizedKeysCommandUser git
    Match all    # End match, settings apply to all users again
    

    이 파일은 일반적으로 다음 위치에 있습니다:

    • Linux 패키지 설치: /etc/ssh/sshd_config
    • Docker 설치: /assets/sshd_config
    • 소스 컴파일 설치: 소스에서 GitLab Shell 설치 지침을 따른 경우 명령은 /home/git/gitlab-shell/bin/gitlab-shell-authorized-keys-check에 있어야 합니다. 이 명령은 root가 소유해야 하고 그룹이나 다른 사람이 쓸 수 없어야 하므로 다른 곳에 래퍼 스크립트를 만드는 것을 고려하세요. 필요에 따라 이 명령의 소유권을 변경하는 것도 고려하세요. 하지만 gitlab-shell 업그레이드 중에 임시 소유권 변경이 필요할 수 있습니다.
  2. OpenSSH를 다시 로드하세요:

    # Debian or Ubuntu installations
    sudo service ssh reload
    
    # CentOS installations
    sudo service sshd reload
    
  3. SSH가 작동하는지 확인하세요:

    1. authorized_keys 파일에서 사용자 키를 주석 처리하세요. 이를 위해 줄 앞에 #을 추가하세요.

    2. 로컬 머신에서 리포지터리를 pull하거나 다음을 실행해 보세요:

      ssh -T git@gitlab.example.com
      

      성공적인 pull 또는 환영 메시지는 키가 파일에 없기 때문에 GitLab이 데이터베이스에서 키를 찾았음을 의미합니다.

조회 실패가 있으면 authorized_keys 파일이 여전히 스캔됩니다. 큰 파일이 존재하는 한 많은 사용자에 대해 Git SSH 성능이 여전히 느릴 수 있습니다.

이를 해결하려면 authorized_keys 파일에 대한 쓰기를 비활성화할 수 있습니다:

  1. SSH가 작동하는지 확인하세요. 이 단계는 중요합니다. 그렇지 않으면 파일이 빠르게 오래됩니다.

  2. authorized_keys 파일에 대한 쓰기를 비활성화하세요:

    1. 오른쪽 상단 모서리에서 Admin을 선택합니다.
    2. 설정 > 네트워크를 선택합니다.
    3. 성능 최적화를 확장합니다.
    4. authorized_keys 파일을 사용하여 SSH 키 인증 확인란을 지웁니다.
    5. 변경 사항 저장을 선택합니다.
  3. 변경 사항을 확인하세요:

    1. UI에서 SSH 키를 제거합니다.
    2. 새 키를 추가합니다.
    3. 리포지터리를 pull해 보세요.
  4. authorized_keys 파일을 백업하고 삭제하세요. 현재 사용자의 키가 이미 데이터베이스에 있으므로 마이그레이션이나 사용자가 키를 다시 추가할 필요가 없습니다.

authorized_keys 파일 사용으로 돌아가는 방법#

이 개요는 간략합니다. 더 많은 컨텍스트는 이전 지침을 참조하세요.

  1. authorized_keys 파일에 대한 쓰기를 활성화하세요.
    1. 오른쪽 상단 모서리에서 Admin을 선택합니다.
    2. 왼쪽 사이드바에서 설정 > 네트워크를 선택합니다.
    3. 성능 최적화를 확장합니다.
    4. authorized_keys 파일을 사용하여 SSH 키 인증 확인란을 선택합니다.
  2. authorized_keys 파일을 다시 빌드하세요.
  3. Linux 패키지 설치에서 Docker를 사용하는 경우 /etc/ssh/sshd_config 또는 /assets/sshd_config에서 AuthorizedKeysCommand 줄을 제거하세요.
  4. sshd를 다시 로드하세요: sudo service sshd reload.

SELinux 지원#

GitLab은 SELinuxauthorized_keys 데이터베이스 조회를 지원합니다.

SELinux 정책은 정적이므로 GitLab은 내부 웹 서버 포트 변경을 지원하지 않습니다. 동적으로 생성되지 않기 때문에 관리자는 환경을 위한 특별한 .te 파일을 만들어야 합니다.

추가 문서#

gitlab-sshd에 대한 추가 기술 문서는 GitLab Shell 문서에서 찾을 수 있습니다.

트러블슈팅#

SSH 트래픽이 느리거나 CPU 부하가 높은 경우#

SSH 트래픽이 느리거나 CPU 부하가 높은 경우:

  • /var/log/btmp의 크기를 확인하세요.
  • 정기적으로 또는 특정 크기에 도달한 후 회전되도록 하세요.

이 파일이 매우 크면 GitLab SSH 빠른 조회로 인해 병목 현상이 더 자주 발생하여 성능이 더욱 저하될 수 있습니다. /var/log/btmp를 완전히 읽지 않도록 sshd_config에서 UsePAM 비활성화를 고려하세요.

실행 중인 sshd: git 프로세스에서 stracelsof를 실행하면 디버깅 정보를 반환합니다. IP x.x.x.x에 대한 SSH를 통한 Git 연결 진행 중에 strace를 얻으려면:

sudo strace -s 10000 -p $(sudo netstat -tp | grep x.x.x.x | egrep 'ssh.*: git' | sed -e 's/.*ESTABLISHED *//' -e 's#/.*##')

또는 실행 중인 SSH를 통한 Git 프로세스에 대한 lsof를 얻으려면:

sudo lsof -p $(sudo netstat -tp | egrep 'ssh.*: git' | head -1 | sed -e 's/.*ESTABLISHED *//' -e 's#/.*##')

SSH 키 빠른 조회

Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

사용자 수가 증가하면 OpenSSH가 사용자 인증을 위해 authorized_keys 파일을 선형 검색하므로 SSH 작업이 느려집니다. authorized_keys 파일을 사용하는 대신 GitLab Shell을 SSH 키 조회에 사용하도록 구성할 수 있습니다.

사용자 수가 증가하면 OpenSSH가 사용자 인증을 위해 authorized_keys 파일을 선형 검색하므로 SSH 작업이 느려집니다. 이 프로세스는 상당한 시간과 디스크 I/O가 필요하여 리포지터리에 push 또는 pull하려는 사용자에게 지연을 발생시킵니다. 사용자가 키를 자주 추가하거나 제거하면 운영 체제가 authorized_keys 파일을 캐시하지 못할 수 있으며, 이로 인해 반복적인 디스크 읽기가 발생합니다.

authorized_keys 파일을 사용하는 대신 GitLab Shell을 SSH 키 조회에 사용하도록 구성할 수 있습니다. 조회가 GitLab 데이터베이스에서 인덱싱되므로 더 빠릅니다.

Note

표준(비배포 키) 사용자의 경우 SSH 인증서 사용을 고려하세요. 데이터베이스 조회보다 빠르지만 authorized_keys 파일의 직접적인 대체는 아닙니다.

Geo에는 빠른 조회가 필요합니다#

Cloud Native GitLab과 달리 기본적으로 Linux 패키지 설치는 git 사용자의 홈 디렉터리에 있는 authorized_keys 파일을 관리합니다. 대부분의 설치에서 이 파일은 /var/opt/gitlab/.ssh/authorized_keys에 있습니다. 다음 명령을 사용하여 시스템에서 authorized_keys를 찾으세요:

getent passwd git | cut -d: -f6 | awk '{print $1"/.ssh/authorized_keys"}'

authorized_keys 파일에는 GitLab에 액세스할 수 있는 사용자의 모든 공개 SSH 키가 포함되어 있습니다. 그러나 단일 진실 공급원을 유지하려면 Geo가 데이터베이스 조회로 SSH 지문 조회를 수행하도록 구성해야 합니다.

Geo를 설정할 때 기본 및 보조 노드 모두에 대해 아래 단계를 따라야 합니다. 데이터베이스 복제가 작동 중인 경우 보조에 자동으로 반영되므로 기본 노드에서 authorized keys 파일에 쓰기를 선택하지 마세요.

빠른 조회 설정#

GitLab Shell은 GitLab 데이터베이스에 빠르고 인덱싱된 조회로 SSH 사용자를 인증하는 방법을 제공합니다. GitLab Shell은 SSH 키의 지문을 사용하여 사용자가 GitLab에 액세스할 권한이 있는지 확인합니다.

다음 SSH 서버에서 빠른 조회를 활성화할 수 있습니다:

각 서비스에 별도의 포트를 사용하여 두 서비스를 동시에 실행할 수 있습니다.

gitlab-sshd와 함께#

gitlab-sshd를 설정하려면 gitlab-sshd 문서를 참조하세요. gitlab-sshd를 활성화한 후 GitLab Shell과 gitlab-sshd는 자동으로 빠른 조회를 사용하도록 구성됩니다.

OpenSSH와 함께#

필수 요건:

  • AuthorizedKeysCommand가 지문을 허용해야 하므로 OpenSSH 6.9 이상이 필요합니다. 버전을 확인하려면 sshd -V를 실행하세요.
  • 관리자 액세스.

OpenSSH로 빠른 조회를 설정하려면:

  1. sshd_config 파일에 다음을 추가하세요:

    Match User git    # Apply the AuthorizedKeysCommands to the git user only
      AuthorizedKeysCommand /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell-authorized-keys-check git %u %k
      AuthorizedKeysCommandUser git
    Match all    # End match, settings apply to all users again
    

    이 파일은 일반적으로 다음 위치에 있습니다:

    • Linux 패키지 설치: /etc/ssh/sshd_config
    • Docker 설치: /assets/sshd_config
    • 소스 컴파일 설치: 소스에서 GitLab Shell 설치 지침을 따른 경우 명령은 /home/git/gitlab-shell/bin/gitlab-shell-authorized-keys-check에 있어야 합니다. 이 명령은 root가 소유해야 하고 그룹이나 다른 사람이 쓸 수 없어야 하므로 다른 곳에 래퍼 스크립트를 만드는 것을 고려하세요. 필요에 따라 이 명령의 소유권을 변경하는 것도 고려하세요. 하지만 gitlab-shell 업그레이드 중에 임시 소유권 변경이 필요할 수 있습니다.
  2. OpenSSH를 다시 로드하세요:

    # Debian or Ubuntu installations
    sudo service ssh reload
    
    # CentOS installations
    sudo service sshd reload
    
  3. SSH가 작동하는지 확인하세요:

    1. authorized_keys 파일에서 사용자 키를 주석 처리하세요. 이를 위해 줄 앞에 #을 추가하세요.

    2. 로컬 머신에서 리포지터리를 pull하거나 다음을 실행해 보세요:

      ssh -T git@gitlab.example.com
      

      성공적인 pull 또는 환영 메시지는 키가 파일에 없기 때문에 GitLab이 데이터베이스에서 키를 찾았음을 의미합니다.

조회 실패가 있으면 authorized_keys 파일이 여전히 스캔됩니다. 큰 파일이 존재하는 한 많은 사용자에 대해 Git SSH 성능이 여전히 느릴 수 있습니다.

이를 해결하려면 authorized_keys 파일에 대한 쓰기를 비활성화할 수 있습니다:

  1. SSH가 작동하는지 확인하세요. 이 단계는 중요합니다. 그렇지 않으면 파일이 빠르게 오래됩니다.

  2. authorized_keys 파일에 대한 쓰기를 비활성화하세요:

    1. 오른쪽 상단 모서리에서 Admin을 선택합니다.
    2. 설정 > 네트워크를 선택합니다.
    3. 성능 최적화를 확장합니다.
    4. authorized_keys 파일을 사용하여 SSH 키 인증 확인란을 지웁니다.
    5. 변경 사항 저장을 선택합니다.
  3. 변경 사항을 확인하세요:

    1. UI에서 SSH 키를 제거합니다.
    2. 새 키를 추가합니다.
    3. 리포지터리를 pull해 보세요.
  4. authorized_keys 파일을 백업하고 삭제하세요. 현재 사용자의 키가 이미 데이터베이스에 있으므로 마이그레이션이나 사용자가 키를 다시 추가할 필요가 없습니다.

authorized_keys 파일 사용으로 돌아가는 방법#

이 개요는 간략합니다. 더 많은 컨텍스트는 이전 지침을 참조하세요.

  1. authorized_keys 파일에 대한 쓰기를 활성화하세요.
    1. 오른쪽 상단 모서리에서 Admin을 선택합니다.
    2. 왼쪽 사이드바에서 설정 > 네트워크를 선택합니다.
    3. 성능 최적화를 확장합니다.
    4. authorized_keys 파일을 사용하여 SSH 키 인증 확인란을 선택합니다.
  2. authorized_keys 파일을 다시 빌드하세요.
  3. Linux 패키지 설치에서 Docker를 사용하는 경우 /etc/ssh/sshd_config 또는 /assets/sshd_config에서 AuthorizedKeysCommand 줄을 제거하세요.
  4. sshd를 다시 로드하세요: sudo service sshd reload.

SELinux 지원#

GitLab은 SELinuxauthorized_keys 데이터베이스 조회를 지원합니다.

SELinux 정책은 정적이므로 GitLab은 내부 웹 서버 포트 변경을 지원하지 않습니다. 동적으로 생성되지 않기 때문에 관리자는 환경을 위한 특별한 .te 파일을 만들어야 합니다.

추가 문서#

gitlab-sshd에 대한 추가 기술 문서는 GitLab Shell 문서에서 찾을 수 있습니다.

트러블슈팅#

SSH 트래픽이 느리거나 CPU 부하가 높은 경우#

SSH 트래픽이 느리거나 CPU 부하가 높은 경우:

  • /var/log/btmp의 크기를 확인하세요.
  • 정기적으로 또는 특정 크기에 도달한 후 회전되도록 하세요.

이 파일이 매우 크면 GitLab SSH 빠른 조회로 인해 병목 현상이 더 자주 발생하여 성능이 더욱 저하될 수 있습니다. /var/log/btmp를 완전히 읽지 않도록 sshd_config에서 UsePAM 비활성화를 고려하세요.

실행 중인 sshd: git 프로세스에서 stracelsof를 실행하면 디버깅 정보를 반환합니다. IP x.x.x.x에 대한 SSH를 통한 Git 연결 진행 중에 strace를 얻으려면:

sudo strace -s 10000 -p $(sudo netstat -tp | grep x.x.x.x | egrep 'ssh.*: git' | sed -e 's/.*ESTABLISHED *//' -e 's#/.*##')

또는 실행 중인 SSH를 통한 Git 프로세스에 대한 lsof를 얻으려면:

sudo lsof -p $(sudo netstat -tp | egrep 'ssh.*: git' | head -1 | sed -e 's/.*ESTABLISHED *//' -e 's#/.*##')