~/.ssh/config에서 정규식을 사용하는 방법이 있습니까?

~/.ssh/config에서 정규식을 사용하는 방법이 있습니까?

두 세트의 서버가 있습니다. 생산 테스트. 모든 서버에는 내부 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

관련 정보