나는 왜 안되는지 작은 컴퓨팅 클러스터에 연결해 온 새롭지 않은 컴퓨터들로 가득한 쓰레기를 가지고 있습니다. 이러한 컴퓨터가 모두 통신할 수 있는 공용 IP 주소가 있는 단일 마스터 노드가 있습니다. 작업자 노드는 NAT 뒤에 있습니다. 따라서 그들 모두와 대화하기 위해 부팅 시 마스터 노드에 대한 역방향 SSH 터널을 모두 생성하도록 했습니다. 따라서 이들은 각각 다른 포트에서 마스터에 연결됩니다. 각 머신은 이전 머신의 포트 번호가 있는 n+1
포트 를 선택합니다 . n
내 노트북의 SSH 구성에는 다음이 있습니다.
Host worker*
ProxyCommand ssh master -W %h:%p
HostName localhost
Host worker001
Port 7001
Host worker002
Port 7002
....
#Host workerX
# Port 7000 + X
내가 하고 싶은 것은 작업자에 대한 단일 항목을 갖는 것입니다. 그래서 작업자X는 포트 7000 + X를 사용합니다. SSH 구성으로 이것이 가능합니까? 그렇지 않은 경우 이 문제가 발생하도록 하는 다른 해결 방법이 있습니까? 또는 내 ssh 구성을 "분할"하여 내 ~/.ssh/config
파일에 100줄의 workerX
.
답변1
ProxyCommand를 사용하고 있으므로 이를 수행하는 사용자 정의 명령을 작성하십시오.
ProxyCommand ~/bin/worker-ssh %h
스크립트 자체는 다음과 같습니다.
#!/usr/bin/env bash
host=$1
if [[ $host =~ ^worker0*([0-9]+)$ ]]; then
port=${BASH_REMATCH[1]}
port=$(( port + 7000 ))
ssh master -W "localhost:$port"
else
echo "error: $0: host '$host' is not a worker" >&2
exit 1
fi
(이와 함께 사용하지 마십시오 HostName
. 프록시 명령은 분명히 원래 호스트 이름을 알아야 합니다.)