SSH Push 연락 방법

SSH Push(ssh-push)는 Salt 클라이언트가 SUSE Manager 서버에 직접 연결할 수 없는 환경에서 사용됩니다. 이 환경에서 클라이언트는 방화벽으로 보호되는 이름이 DMZ인 영역에 위치합니다. DMZ 내의 어떤 시스템도 SUSE Manager 서버가 있는 내부 네트워크에 대한 연결을 열 수 있는 권한이 없습니다.

SSH 푸시는 클라이언트에 데몬 에이전트를 설치할 수 없는 경우에도 사용할 수 있습니다.

SSH 푸시 방법에는 심각한 제한이 있습니다. 크기 조정이 원활하지 않으며, 일반 Salt 방법(기본값)보다 더 많은 서버 리소스와 네트워크 대역폭을 소비합니다. 푸시 SSH 방식은 대규모 설정(1000명 이상의 클라이언트)의 경우에는 전혀 지원되지 않습니다.

서버는 SSH Push를 사용하여 정기적으로 클라이언트에 연락해 체크인하고 예약된 작업과 이벤트를 수행합니다.

프로비저닝 모델을 사용하여 시스템을 다시 설치하는 것은 현재 SSH Push로 관리되는 클라이언트에서는 지원되지 않습니다.

이 이미지는 SSH Push 프로세스 경로를 보여줍니다. Taskomatic 블록의 왼쪽에 있는 모든 항목은 SUSE Manager 클라이언트에서 실행 중인 프로세스를 나타냅니다.

salt ssh contact taigon

SSH Push를 사용하려면 클라이언트에서 실행 중인 SSH 데몬이 있어야 하며, SUSE Manager 서버에서 실행 중인 salt-api 데몬에 연결할 수 있어야 합니다. 또한 요구사항에 해당하는 Python 버전이 클라이언트 시스템에 Salt 번들과 함께 배포됩니다.

다음 등록 절차를 시작하기 전에 SSH 푸시 연락 방법을 구성하여 활성화 키를 정의합니다. 이 방법에서는 서버에 HTTPS로 직접 연결해야 합니다.

이러한 클라이언트를 SUSE Manager 서버에 등록하려면 Web UI 또는 API를 사용해야 합니다. 다음 절차 또는 예제를 참조하십시오.

절차: SSH Push를 사용하여 클라이언트 등록
  1. SUSE Manager Web UI에서 시스템  부트스트랩으로 이동하여 해당 필드를 완성합니다.

  2. SSH Push 연락 방법이 구성된 활성화 키를 선택합니다. 활성화 키에 대한 자세한 내용은 활성화 키에서 확인할 수 있습니다.

  3. SSH를 통해 시스템을 완전히 관리 확인란을 선택합니다.

  4. 부트스트랩을 클릭하여 등록을 시작합니다.

  5. 시스템  개요로 이동하여 시스템이 올바르게 등록되었는지 확인합니다.

예: SSH를 통한 푸시에 대한 API 액세스

API를 사용해 어떤 연결 방법을 사용할지 관리할 수 있습니다. 다음 Python 코드 예제에서는 연결 방법을 ssh-push로 설정합니다.

유효한 값은 다음과 같습니다.

  • default(풀)

  • ssh-push

  • ssh-push-tunnel

client = xmlrpclib.Server(SUMA_HOST + \/rpc/api\, verbose=0)
key = client.auth.login(SUMA_LOGIN, SUMA_PASSWORD)
client.system.setDetails(key, 1000012345, {'contact_method' : 'ssh-push'})

1. 사용 가능한 파라미터

SSH Push를 구성할 때 호스트, 활성화 키, 비밀번호 등 시스템의 등록 시에 사용되는 파라미터를 수정할 수 있습니다. 비밀번호는 부트스트랩에만 사용되며 어디에도 저장되지 않습니다. 향후 모든 SSH 세션은 키/인증서 쌍을 통해 인증됩니다. 이러한 파라미터는 시스템  부트스트래핑에서 구성할 수 있습니다.

또한 시스템 전체에 사용되는 영구 파라미터를 구성할 수 있으며, sudo 사용자가 루트 대신 권한 없는 사용자로 시스템에 액세스하도록 설정할 수도 있습니다.

절차: 권한 없는 SSH 액세스 구성
  1. SUSE Manager 서버에 최신 spacewalk-taskomaticspacewalk-certs-tools 패키지가 설치되어 있는지 확인합니다.

  2. 각 클라이언트 시스템에서 적절한 권한 없는 사용자를 생성합니다.

  3. 각 클라이언트에서 다음과 같이 sudoers 파일을 편집합니다.

    sudo visudo
  4. 이 줄을 sudoers 파일 끝에 추가하여 사용자에게 sudo 액세스 권한을 부여합니다. 다음과 같이 <user>를 Web UI에서 클라이언트를 부트스트래핑하고 있는 사용자의 이름으로 교체합니다.

    <user>  ALL=NOPASSWD: /usr/bin/python3, /var/tmp/venv-salt-minion/bin/python

    이 절차는 클라이언트 등록에 필요한 비밀번호가 없어도 루트에 액세스 권한을 부여합니다. 클라이언트는 성공적으로 설치된 후 루트 권한으로 실행되므로 액세스 권한이 더 이상 필요 없습니다. 클라이언트가 성공적으로 설치된 후 sudoers 파일에서 이 줄을 제거하는 것이 좋습니다.

  5. SUSE Manager 서버의 /etc/rhn/rhn.conf 구성 파일에서 다음과 같은 줄을 추가하거나 수정하여 권한 없는 사용자 이름을 포함합니다.

    ssh_push_sudo_user = <user>

이 구성 파라미터를 변경한 후에는 salt-secrets-config.service, tomcat.service, taskomatic.service와 같은 서비스를 다시 시작해야 합니다. 필요한 모든 서비스를 적용하려면 SUSE Manager 서버를 루트로 다시 시작하는 것이 가장 좋은 방법입니다.

mgradm restart

2. 작업 실행

SSH Push 기능은 taskomatic을 사용하여 salt-ssh를 수행해 예약된 작업을 실행합니다. taskomatic 작업은 주기적으로 예약된 작업을 확인하고 실행합니다. SSH Push 기능은 예약된 작업을 기반으로 완전한 salt-ssh 호출을 실행합니다.

기본적으로 한 번에 20건의 Salt SSH 작업을 실행할 수 있습니다. 구성 파일에 다음과 같은 줄을 추가하고 parallel_threads의 값을 상향 조정하여 병렬로 실행할 수 있는 작업의 수를 늘릴 수 있습니다. 문제를 방지하기 위해 병렬 작업의 수를 다음과 같이 낮게 유지하는 것이 좋습니다.

taskomatic.sshminion_action_executor.parallel_threads = <number>
org.quartz.threadPool.threadCount = <value of parallel_threads + 20>

이렇게 하여 어느 한 곳의 클라이언트에서 병렬로 실행할 수 있는 작업의 수와 Taskomatic이 사용하는 작업자 스레드의 총 개수를 조정할 수 있습니다. 작업을 여러 클라이언트에서 실행해야 하는 경우 작업은 항상 각 클라이언트에서 순차적으로 실행됩니다.

클라이언트가 프록시를 통해 연결되어 있는 경우 프록시에서 MaxSessions 설정을 조정해야 합니다. 이 경우 병렬 연결의 수를 클라이언트 총 수의 세 배로 설정합니다.

3. 향후 출시될 기능

SSH Push를 통한 푸시에서는 아직 지원하지 않는 몇 가지 기능이 있습니다. 다음 기능은 Salt SSH 클라이언트에서 작동하지 않습니다.

  • OpenSCAP 감사

  • Beacons, 이로 인해

    • zypper를 사용해 시스템에 패키지를 설치해도 패키지 새로 고침이 호출되지 않습니다.

    • 가상 호스트 기능(예: 게스트에 대한 호스트)은 가상 호스트 시스템이 Salt SSH 기반인 경우 작동하지 않습니다.

3.1. 자세한 내용은