두 세트의 서버가 있습니다. 생산 테스트. 모든 서버에는 내부 IP가 있습니다. 현재 저는 다음 별칭을 사용하여 로그인하고 있습니다.
Host pro-10
Hostname 192.168.1.10
ProxyCommand ssh production-server nc %h %p
각 서버에 대해 이 규칙을 반복해야 합니다. 이 작업을 수행하기 위한 정규 표현식을 찾고 있나요?
Host pro-*
Hostname 192.168.1.$1
ProxyCommand ssh production-server nc %h %p
이를 수행할 수 있는 방법이 있습니까?
답변1
아니요, SSH는 정규식을 지원하지 않습니다.ssh_config (1)
그리고 당신이 제시한 예는 정규식이 아닙니다.ssh_config (1)
Supported PATTERNS
즉, IP에 대한 패턴을 정의할 수 있습니다.
Host 192.168.1.*
ProxyCommand ssh production-server nc %h %p
그리고 모든 내부 IP를 전달할 수 있어야 합니다. 또 다른 해결책은 /etc/hosts
다음과 같이 특정 IP에 대한 항목을 추가하는 것입니다 .
192.168.1.10 pro10
192.168.1.11 pro11
파일에 항목을 만듭니다 ~/.ssh/config
.
Host pro1?
ProxyCommand ssh production-server nc %h %p
답변2
SSH 구성을 동적으로 설정하기 위해 정규식을 사용하는 것이 가능하지 않다고 생각합니다. 그러나 Bash에서 for 루프를 사용하여 각 서버의 구성 파일에 세 줄을 자동으로 생성할 수 있어야 합니다. 이 예에서는 pro-75부터 pro-125까지 서버에 대한 항목을 만들어야 한다고 가정합니다.
for i in $(seq 75 125);
do
echo "Host pro-$i" >> ~/.ssh/config
echo "Hostname 192.168.1.$i" >> ~/.ssh/config
echo "ProxyCommand ssh production-server nc %h %p" >> ~/.ssh/config
echo "\n" >> ~/.ssh/config
done
그러면 75부터 125까지의 모든 숫자가 포함된 목록이 작성되어 반복 목록으로 저장됩니다. 그런 다음 목록의 각 구성원을 반복하여 $i를 대체합니다. 각 줄은 SSH 사용자 구성 파일 끝에 추가됩니다. 마지막으로 구성 파일을 약간 분할하기 위해 줄바꿈을 추가했습니다.
연속된 숫자 필드가 아닌 목록에 특정 값이 필요한 경우 다음과 같이 목록을 수동으로 작성하십시오.
1 23 45 67 89
답변3
아니요, 안타깝게도 불가능합니다. 확장 프로그램을 사용할 수 있다는 것을 이미 알고 계실 수도 있지만 %h
그게 전부입니다.
귀하의 경우 for
루프를 사용하지 않으시겠습니까?
for i in {4..10}
do
echo -e "Host pro-$i\nHostname 192.168.1.$i\nProxyCommand ssh production-server nc %h %p\n"; >> ~/.ssh/config
done
제가 생각할 수 있는 유일한 다른 옵션은 정규식을 사용하여 DNS 항목을 생성한 다음(서버가 이 옵션을 지원하는 경우) 이를 사용하는 것입니다.
답변4
ProxyCommand를 사용하는 것이 가능합니다. 이는 단지 셸 명령 집합이기 때문입니다.
Pro-*
ProxyCommand SSH 프로덕션 서버 NC 192.168.1을 호스팅합니다. `echo "%h" | perl -pe 's/pro-//'` %p