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
나는 당신 %h
이 Hostname
인수에 사용할 수 있다는 것을 알고 있지만 그것이 호스트 이름 일 것입니다. 내가 정말로 필요한 것은 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
하여 수행하십시오 ( %p
22로 하드 코딩 포트 대신 사용 ).
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-및 암호를 입력하여)
- 고급 로깅과 같은 사용자 지정 논리 추가
- 대상 서버에 연결하기 위해 여러 연결을 통해 터널링