클러스터를 관리하는 단말이 원격 PC에서 노드에 접속할 수 있나요?

클러스터를 관리하는 단말이 원격 PC에서 노드에 접속할 수 있나요?

내 PC에서 여러 클러스터 노드를 관리해야 합니다. 문제는 클러스터 노드가 원격 PC에서만 액세스할 수 있다는 것입니다. 따라서 먼저 원격 PC로 SSH를 연결한 다음 원격 PC에서 클러스터 노드로 연결해야 합니다.

노드에 직접 액세스할 수 있다면 Clustersh와 같은 것을 사용하여 모든 노드를 동시에 관리할 것입니다.

내 상황에 맞는 Clustersh와 같은 도구가 있습니까?

답변1

비슷한 작업을 수행하기 위해 "클러스터 화면"을 함께 엮었습니다. /etc/clustersClustersh와 동일한 방식으로 파일을 설정합니다 .

cluster1 host1 host2
cluster2 host3 host4

그런 다음 다음과 같은 파일 /usr/local/bin/cs(cssh 이름을 약간 표절한 것임) 이 있습니다.

#!/bin/bash

if [[ $# < 1 ]]
then
   echo -e "Usage : $0 cluster [command]";
   exit;
fi;

cluster=$(/bin/grep $1 /etc/clusters | sed -e 's/[^\ ]*\ //')

for s in $cluster; do
    if [ -n "$2" ]
    then
        exec screen -t "$s" $s "$2";
    else
        exec screen -t "$s" $s;
    fi
done;

그럼 당신은 실행할 수 있습니다

screen
cs clustername "optional command"

Clustersh만큼 좋지는 않지만 작업을 완료합니다.

답변2

ssh아니요, 한 컴퓨터에 연결한 다음 다른 컴퓨터에 연결할 필요는 없습니다 . 오래된 ssh고객이라도 이런 일을 할 필요는 없습니다.

나는 많은 원격 시스템에 똑같은 명령을 입력하는 데 관심이 없지만 귀하와 비슷한 상황에 처해 있습니다.

질문하실 때 자세한 내용을 기재하지 않으셨기 때문에 댓글로 질문드립니다. 그럼 몇 가지 가정을 해보겠습니다. 나는 당신을 가정 할 것입니다지역 상자Tmux 및 ssh(클라이언트)를 상당히 새로운 버전으로 설치하십시오. 그렇지 않은 경우(예: Windows이기 때문에) 가상 머신을 사용하세요. 또한 귀하의 "원격 PC"를 가정하겠습니다.점프 호스트, ssh또한 설치되어 있고 연결할 수 있습니다.~에서귀하의 지역 상자는도착이것클러스터 노드차례로. 클러스터 노드로 node1전달 하겠습니다 . node5그다음에는 다른 두 사람이 localbox더 있었습니다 jumphost.

이제 용어가 사라졌으니 열어주세요.이것은 ssh_config(5)에 대한 링크입니다.다음 사항이 불분명해지면 전환하세요.

홈 폴더에서 즐겨 사용하는 텍스트 편집기로 엽니다 localbox. 필요한 경우 .ssh/config폴더를 만듭니다. ~/.ssh그런 다음 다음을 입력합니다.

Host jumphost
    HostName the.name.of.your.jumphost.tld
    ForwardAgent yes # YMMV

Host node1 node 2 node3 node4 node5
    ProxyCommand ssh -W %h:%p jumphost

이는 ssh연결하려면 먼저 다른 호스트에 연결하고 전달/프록시해야 함 을 보여줍니다 .node1node5jumphost

-W host:port 요청은 클라이언트의 표준 입력 및 출력에 대한 보안 채널을 통해 포트의 호스트로 전달됩니다. -N, -T, ExitOnForwardFailure및 을 의미합니다 ClearAllForwardings. 프로토콜 버전 2에만 적용됩니다.

ssh특히 오래된 버전 ( jumphost즉, 지원되지 않음 -W) 을 사용하는 경우 ,하지만netcat( nc)이 설치되어 있으면 ProxyCommand다음으로 교체할 수 있습니다.

ProxyCommand ssh user@proxy nc %h %p 2> /dev/null

이제 위의 줄이 텍스트 파일에 있으면 필요에 따라 각 클러스터 노드에 대한 줄을 추가합니다.

Host node1 node1.cluster.domain.tld
    HostKeyAlias node1.cluster.domain.tld
    HostName 1.2.3.4 # you can give IPs

이는 이름이 node1공개되지 않았거나 귀하에게 알려져 있지 localbox않으며 찾을 수 없다고 가정합니다. 그러나 IP는 알려져 있습니다. 나중에 실제 호스트 이름으로 HostKeyAlias전환할 수 있는지 확인하세요 . 또한 최상위 도메인이 변경되는 경우 HostName $IP별칭을 비슷한 것으로 줄이는 경향이 있습니다 .node1.cluster

따라서 node2공개 DNS 레코드가 있을 수 있습니다.

Host node2 node2.cluster.otherdomain.tld
    HostKeyAlias node2.cluster
    HostName node2.cluster.otherdomain.tld # ... or hostnames

이제 다음 중 하나를 사용할 수 있습니다(권장).

ssh node1
ssh node2

또는 (권장하지 않음):

ssh node`.cluster.domain.tld
ssh node2.cluster.otherdomain.tld

다음 노드에 연결통과하다이것 jumphost. 또한 jumphost간단히 입력하여 연결할 수도 있습니다 ssh jumphost.

여기서 이해해야 할 중요한 것은 라인에 표시되는 이름은 HostDNS 이름이나 IP와 완전히 독립적이라는 것입니다.만약에HostName이 회선에 대한 회선이 존재합니다 Host. IIRC 들여쓰기는 관례이지만 필수는 아닙니다.

이제 SSH 측에서 해결해야 할 유일한 것은 인증입니다. User대체 사용자 이름을 사용하여 연결하려면 각 "블록"에 명시적으로 를 제공 할 수 있습니다 . jumphost프록시 전달을 활성화할 만큼 충분히 신뢰하는지 결정해야 합니다 . 이렇게 하지 않으면 키를 생성 jumphost하고 이를 클러스터 노드에 알려야 합니다( 에서 .ssh/authorized_keys). 다른 것들은 비밀번호를 너무 자주 묻는 메시지를 표시합니다.

지금까지의 모든 내용을 요약하되, 어느 사용자가 어디에 연결하는지 교대로 고려합니다.

Host jumphost
    HostName the.name.of.your.jumphost.tld
    User joe

Host node1 node 2 node3 node4 node5
    ProxyCommand ssh -W %h:%p jumphost
    User joseph

Host node1 node1.cluster.domain.tld
    HostKeyAlias node1.cluster.domain.tld
    HostName 1.2.3.4 # you can give IPs
    User root

Host node2 node2.cluster.otherdomain.tld
    HostKeyAlias node2.cluster
    HostName node2.cluster.otherdomain.tld # ... or hostnames

... 연결을 전달하기 위해 연결 ssh node1됩니다 . 그리고 에서는 순방향 연결 로 연결합니다 .joe@jumphostroot@node1ssh node2joe@jumphostjoseph@node2

따라서 호스트별로 일부 구성 파일 섹션을 재정의할 수 있습니다.


SSH 부분이 완료되었으므로 명령을 병렬로 실행해 보겠습니다.

clusterssh각 xterm 창이 클러스터 노드에 대한 SSH 연결을 설정한 후에는 여러 xterm 창을 조정할 수 있어야 합니다. 그러나 나는 개인적으로 이것이 번거롭고 직관적이지 않다고 생각합니다.

당신에게는 많은 선택이 있습니다. 내가 제안하는 것들은 모두 당신 것입니다 localbox.

dsh(댄서/분산쉘) 또는 접시 (근면/분산쉘) 중 하나로 사용할 수 있습니다 .

pssh(parallel ssh)도 또 다른 옵션이지만 Python을 기반으로 하기 때문에 경험상 구문 분석 기능이 .ssh/config제한될 수 있습니다.

마지막으로 추천드리고 싶은 것은멀티플렉서당신을 위한. "Terminal Multiplexer"의 약어로, GNU와 동일한 범주에 속 screen하지만 screen.

단일 Tmux 창의 창을 Ctrl+a S( Ctrl+a내가 선호하는 접두사는 어디입니까) 동기화하는 바로 가기가 있습니다.

bind-key S set-window-option synchronize-panes \; display-message 'Toggled synchronize-panes'

이렇게 하면 Tmux 창 내의 각 창에서 SSH 연결을 열고 입력을 모든 창에 동기화할 수 있습니다. 이렇게 하면 Tmux 창(창은 기본적으로 Tmux 용어의 탭과 유사)의 모든 창에 명령을 입력하고 를 사용하여 즉시 실행할 수 있습니다 Enter.

그러나 이는 소수의 원격 노드에서는 제대로 작동할 수 있지만 수가 많을 경우에는 다루기가 어렵다는 점을 명심하십시오. 따라서 이 모든 과정이 끝나면 제가 추천하는 다른 솔루션 중 하나를 살펴보는 것이 좋습니다.

관련 정보