OpenSSH 구성은 프로그래밍 방식으로 포트를 할당합니까?

OpenSSH 구성은 프로그래밍 방식으로 포트를 할당합니까?

나는 왜 안되는지 작은 컴퓨팅 클러스터에 연결해 온 새롭지 않은 컴퓨터들로 가득한 쓰레기를 가지고 있습니다. 이러한 컴퓨터가 모두 통신할 수 있는 공용 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. 프록시 명령은 분명히 원래 호스트 이름을 알아야 합니다.)

관련 정보