현재 Bastion VM을 제외하고 모든 인스턴스가 프라이빗 서브넷에 있는 몇 가지 실습이 있습니다. 따라서 개발자는 노트북에서 Bastion까지 SSH 터널을 만들고 Bastion에서 일부 마이크로서비스까지 또 다른 터널을 만들어 UI에 액세스할 수 있도록 해야 합니다.
프로세스는 다음과 같습니다.
ssh -i <key>.pem -L <port x>:localhost:<port x> user@<hostname of Bastion>
User logged in to Bastion VM.
ssh -i <key>.pem -L <port x>:<hostname of microservice>:<port of microservice> user@<hostname of microservice>
Now they are able to access UI at http://localhost:<port x>
이제 이것은 일상적인 사용에 있어서 상당히 복잡하고 시간이 많이 걸리는 작업이므로 한 번의 클릭으로 동일한 작업을 수행하도록 구성할 수 있는 소프트웨어를 설정하려고 생각했습니다.
내가 발견보안 파이프, 하지만 내 목적에 맞게 사용하는 방법을 잘 모르겠습니다. 누군가가 다른 소프트웨어를 사용하여 위의 내용을 달성하기 위한 대안을 제안할 수 있습니까?
답변1
복잡한 방식으로 하고 있기 때문에 복잡합니다. OpenSSH에는 이러한 종류의 빈번한 연결을 단순화하는 메커니즘이 이미 있습니다. (메모:이 게시물에서는 개발자가 다음에 대한 개인 키를 가지고 있다고 가정합니다.둘 다즉, 요새 호스트는 복사할 수 없는 일부 자격 증명을 보유하지 않습니다.)
먼저 하나의 SSH 명령으로 압축하는 방법을 찾으십시오. 요새 호스트가 이제 웹 연결이 아닌 SSH 연결을 릴레이하므로 실제로 터널링이 약간 반전됩니다.
ssh -i <key>.pem -o ProxyCommand="ssh -i <key>.pem -W %h:%p user@<bastion>" -L <portX>:<microservice>:<mport> user@<hostname>
최신 OpenSSH 버전에서는 수동 ProxyCommand 대신 -J
/를 사용하여 더욱 단순화할 수 있습니다.JumpHost
ssh -i <key>.pem -J user@<bastion> -L <portX>:<microservice>:<mport> user@<hostname>
이제 이것을 ~/.ssh/config 옵션으로 변환합니다. 요새 호스트 자체에 연결하는 데 필요한 옵션, 서비스 호스트에 적용되는 옵션, 모든 호스트에 공통되는 옵션을 식별합니다('호스트' 섹션에서는 여러 항목을 허용합니다). 이름 및 와일드카드까지):
Host <bastion>
User <user>
IdentityFile <key>.pem
Host <hostname>
User <user>
IdentityFile <key>.pem
#JumpHost <bastion>
ProxyCommand ssh -W %h:%p <bastion>
중앙에서 배포할 수 있는 이 위치에 있으면 명령은 다음과 같습니다.
ssh -L <portX>:<microservice>:<mport> <hostname>
(회사 도메인을 자동으로 추가하는 방법도 있습니다. 예를 들어 서버가 svc1.dev.example.com이라고 하면 Hostname %h.dev.example.com
또는 을 CanonicalDomains dev.example.com
실행하게 됩니다 ssh svc1
.)
이는 일반적인 방법으로 얻을 수 있는 것만큼 간단합니다. 나머지 4개의 매개변수는 본질적으로 가변적이므로(각 개발자의 요구에 따라) 상단에 그래픽 UI를 배치하더라도 사용자는 동일한 양의 정보를 제공해야 합니다. (모든 OS에서 OpenSSH와 함께 작동합니다.)
즉, 만약같은터널은 매번 설정되며 ~/.ssh/config( -L
LocalForward에 해당)에 코딩할 수도 있으며 개발자는 ssh <hostname>
.
(실질적으로 OpenSSH를 실행할 수 있는 모든 OS는 일반적으로 sh/bash 및/또는 명령 별칭으로 작성된 스크립트도 지원합니다.)