SSH Push 연락 방법

SSH Push (ssh-push)는 Salt 클라이언트가 SUSE Multi-Linux Manager 서버에 직접 접근할 수 없는 환경에서 사용됩니다. 이 환경에서 클라이언트는 DMZ라고 불리는 방화벽 보호 구역에 위치해 있습니다. DMZ 내의 어떤 시스템도 SUSE Multi-Linux Manager 서버가 위치한 내부 네트워크에 연결을 열 수 있는 권한이 없습니다.

SSH Push는 SUSE Multi-Linux Manager에서 클라이언트로만 터널을 열지만, 역 채널은 직접 연결됩니다. 이러한 시나리오는 어디에서나 작동하지 않을 수 있습니다. 따라서 SSH Push(터널 사용)도 연락 방법으로 사용할 수 있습니다. 이 방법은 역 터널도 열어주므로, 클라이언트에서 서버로의 연결을 차단할 수 있는 모든 방화벽을 통해 통신할 수 있습니다.

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

SSH Push 방법에는 심각한 제한이 있습니다. 잘 확장되지 않으며, 일반 Salt 방법(default)보다 서버 자원과 네트워크 대역폭을 더 많이 소모합니다. Push SSH 방법은 대규모 설정(1000 클라이언트 이상)에서는 전혀 지원되지 않습니다.

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

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

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

salt ssh contact taigon

SSH Push를 사용하려면 클라이언트에서 SSH 데몬이 실행 중이어야 하며, SUSE Multi-Linux Manager 서버에서 실행 중인 salt-api 데몬에 의해 접근 가능해야 합니다. 추가로, 필요한 Python 버전은 클라이언트 시스템의 Salt 번들에 배포됩니다.

다음 등록 절차를 시작하기 전에 SSH Push 연락 방법이 구성된 활성화 키를 정의하십시오. 이 방법은 서버와 HTTPS로 직접 연결이 되어 있어야 합니다.

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

절차 SSH Push를 사용하여 클라이언트 등록
  1. SUSE Multi-Linux Manager Web UI에서 시스템  부팅으로 이동하여 적절한 필드를 작성하십시오.

  2. SSH Push 연락 방법이 구성된 활성화 키를 선택하십시오. 활성화 키에 대한 자세한 내용은 활성화 키을 참조하십시오.

  3. Manage system completely via SSH 확인란을 선택하십시오.

  4. 부팅을 클릭하여 등록을 시작합니다.

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

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

API를 사용하여 사용할 연락 방법을 관리할 수 있습니다. 이 예제 Python 코드는 연락 방법을 ssh-push(으)로 설정합니다.

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

  • default (풀)

  • ssh-push

  • ssh-push-tunnel

client = xmlrpclib.Server(MLM_HOST + "/rpc/api", verbose=0)
key = client.auth.login(MLM_LOGIN, MLM_PASSWORD)
client.system.setDetails(key, 1000012345, {'contact_method' : 'ssh-push'})

1. 사용 가능한 파라미터

SSH Push를 구성할 때 시스템이 등록될 때 사용되는 매개변수(호스트, 활성화 키 및 비밀번호 포함)를 수정할 수 있습니다. 비밀번호는 부팅에만 사용되며, 어디에도 저장되지 않습니다. 모든 향후 SSH 세션은 키/인증서 쌍을 통해 인증됩니다. 이 매개변수는 시스템  부팅에서 구성됩니다.

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

서버 컨테이너 내에서 단계를 실행하기 전에 `mgrctl term`을(를) 사용하십시오.

절차 권한 없는 SSH 액세스 구성
  1. SUSE Multi-Linux Manager 서버에 최신 spacewalk-taskomaticspacewalk-certs-tools 패키지가 설치되어 있는지 확인하십시오.

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

  3. 각 클라이언트 시스템에서 sudoers 파일을 편집합니다:

    sudo visudo
  4. 이 줄을 sudo 파일의 끝에 추가하여 사용자에게 sudoers 액세스를 부여하십시오. `<user>`을(를) Web UI에서 클라이언트를 부팅하는 사용자의 이름으로 교체하십시오:

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

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

  5. SUSE Multi-Linux Manager 서버 컨테이너 내에서 /etc/rhn/rhn.conf 구성 파일을 편집하고 이 줄에 권한 없는 사용자 이름을 포함하도록 추가하거나 수정합니다:

    ssh_push_sudo_user = <user>
  6. 이 구성 매개변수를 변경한 후에는 salt-secrets-config.service, tomcat.service, `taskomatic.service`과(와) 같은 서비스를 다시 시작해야 합니다. 모든 필요한 서비스를 포함하기 위해서는 루트 사용자로 SUSE Multi-Linux 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 기반인 경우 작동하지 않습니다.

자세한 내용은 다음을 참조하십시오.