~ / .ssh / config에서 SSH 호스트 항목을 동적으로 생성 있습니다 ~/.ssh/config. Host

ssh를 통해 전체 호스트 더미를 관리해야합니다. 그러나 특정 게이트웨이 ssh 서버를 통해서만 액세스 할 수 있습니다.

내 안에 다음이 있습니다 ~/.ssh/config.

Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22

그러나 나는이 많은 기계에 연결해야합니다. 내에 수십 개의 항목을 넣는 대신 ~/.ssh/config어쨌든 다음과 같은 것을 가질 수 있습니까?

Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22

나는 당신 %hHostname인수에 사용할 수 있다는 것을 알고 있지만 그것이 호스트 이름 일 것입니다. 내가 정말로 필요한 것은 bash ‘s와 같은 일종의 문자열 대체 ${VAR%thingie}입니다. 이것이 가능한가?



답변

다음 SSH 구성 파일을 사용하여 수행 할 수 있습니다.

Host *
  ServerAliveInterval 120

Host gateway.somewhere.com
  User jdoe

Host gateway+*
  User jdoe
  ProxyCommand ssh -T -a $(echo %h |cut -d+ -f1).somewhere.com nc $(echo %h |cut -d+ -f2) %p 2>/dev/null
  ControlMaster auto
  ControlPath ~/.ssh/ssh-control_%r@%h:%p

그런 다음 내부 호스트에 다음과 같이 액세스하십시오.

ssh gateway+internalhost01.somewhere.com
ssh gateway+internalhost02.somewhere.com

오른쪽 절반에 선택한 이름은 점프 호스트가 해결할 수 있어야합니다.

User 매개 변수는 다른 호스트 클래스의 다른 사용자에게 수동으로 맵핑해야하는 경우에 지정됩니다. SSH 연결 재사용을 허용하도록 ControlMaster 및 ControlPath가 지정되었습니다.


답변

명령 행에서 호스트 이름을 지정할 수 있으므로 HostName을 수동으로 지정할 필요가 없습니다.

간단히 시도하십시오 :

Host *.domain
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh mygateway /usr/bin/nc %h 22


답변

이 작업을 수행 할 방법이없는 것 같습니다.


답변

비슷한 문제가 발생하여 모든 상용구를 생성하는 스크립트를 작성했습니다. 더 이상 ~ / ssh / config를 변경하지 않고 ~ / ssh / config.in을 변경하고 스크립트를 다시 실행합니다.


답변

Hostname선언을 통해 직접 호스트 이름을 재정의하도록 지정 하지 말고 런타임에 호스트 이름 을 결정하십시오. 명령에서 참조하는 데 ProxyCommand사용하여의 일부로 평가 %h하여 수행하십시오 ( %p22로 하드 코딩 포트 대신 사용 ).

Host mygateway-*
   #Hostname ???WHAT GOES HERE????
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh mygateway nc $(echo %h|sed 's/^mygateway-//') %p

더 일반적인 스탠자를 가질 수도 있습니다. 따라서 a없이 호스트를 지정 -하거나 일치하는 다른 스탠자에 -따라 지정할 수 있지만 다음과 같이 일반적인 스탠자 를 사용하면됩니다 <gateway>-<target>.

Host *-*
   # Assume LHS of "-" is GW and RHS of "-" is target host
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh $(echo %h|cut -d - -f1) nc $(echo %h|cut -d - -f2-) %p

또한 최신 버전의 SSH 클라이언트 [-W host:port]nc(netcat) 과 동일한 기능을 직접 수행하는 옵션을 지원합니다 . 따라서 수정 된 것을 사용할 수 있습니다 :

Host *-*
   # Assume LHS of "-" is GW and RHS of "-" is target host
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh -W $(echo %h|cut -d - -f2-):%p $(echo %h|cut -d - -f1)

물론, 유한 한 호스트 목록이 있다면 언제든지 다음을 수행 할 수 있습니다.

Host host1 host2 host3 hostN
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh mygateway nc %h %p

도움이 되었기를 바랍니다!


답변

동일한 설정의 클라이언트가 있었고 DSSH 를 사용 하여 문제를 해결했습니다.
무엇보다도 DSSH를 사용하면 게이트웨이 호스트를 통해 원격 호스트에 투명하게 로그인 할 수 있습니다.

사용 사례

  • “ena”로그인이 필요한 Cisco 라우터에서 구성 매개 변수 수집
  • 종료 상태를 유지하면서 PermitRootLogin이 root로 직접 비활성화 된 서버에 로그인 (자동으로 su-및 암호를 입력하여)
  • 고급 로깅과 같은 사용자 지정 논리 추가
  • 대상 서버에 연결하기 위해 여러 연결을 통해 터널링

답변