내 PC에서 여러 클러스터 노드를 관리해야 합니다. 문제는 클러스터 노드가 원격 PC에서만 액세스할 수 있다는 것입니다. 따라서 먼저 원격 PC로 SSH를 연결한 다음 원격 PC에서 클러스터 노드로 연결해야 합니다.
노드에 직접 액세스할 수 있다면 Clustersh와 같은 것을 사용하여 모든 노드를 동시에 관리할 것입니다.
내 상황에 맞는 Clustersh와 같은 도구가 있습니까?
답변1
비슷한 작업을 수행하기 위해 "클러스터 화면"을 함께 엮었습니다. /etc/clusters
Clustersh와 동일한 방식으로 파일을 설정합니다 .
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
연결하려면 먼저 다른 호스트에 연결하고 전달/프록시해야 함 을 보여줍니다 .node1
node5
jumphost
-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
.
여기서 이해해야 할 중요한 것은 라인에 표시되는 이름은 Host
DNS 이름이나 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@jumphost
root@node1
ssh node2
joe@jumphost
joseph@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.
그러나 이는 소수의 원격 노드에서는 제대로 작동할 수 있지만 수가 많을 경우에는 다루기가 어렵다는 점을 명심하십시오. 따라서 이 모든 과정이 끝나면 제가 추천하는 다른 솔루션 중 하나를 살펴보는 것이 좋습니다.