게이트웨이 서버 점프 요새 호스트 로컬 설정

게이트웨이 서버 점프 요새 호스트 로컬 설정

중간(배스천, 점프, 게이트웨이) 서버를 사용하여 원격 개인 호스트로 SSH를 통해 연결하고 싶습니다. 이 명령은 잘 작동합니다.

ssh gateway ssh private

이 ~/.ssh/config 설정을 사용하면 다음과 같습니다.

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

~/.ssh/config에서 이를 어떻게 구현할 수 있나요? 나는 행운을 빌어 ProxyCommand를 여러 번 반복해 보았습니다. 게이트웨이 호스트에 있는 ID 파일을 사용하여 개인 호스트에 액세스하고 싶습니다. 나는 다음을 할 수 있기를 원합니다:

ssh private

나는 여기에 설명된 기술을 알고 있지만 내 공개 키가 모든 개인 호스트에 있어야 하지만 나는 그것을 원하지 않습니다.

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

답변1

먼저, SSH를 통해 비공개로 연결할 수 있도록 게이트웨이에서 SSH 키를 구성합니다. 그런 다음 클라이언트에서 게이트웨이에서 인증하는 데 사용하는 별도의 개인/공개 키 쌍을 만듭니다. 예 ssh-keygen -t rsa -f id_gateway.

그런 다음 게이트웨이에서 command=authorized_keys 파일의 구문을 사용하십시오. 예를 들어 항목은 다음과 같습니다.

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

command="command"자세한 내용은 sshd 맨페이지를 검색하세요 . 이 줄에 id_gateway.pub 키를 추가해야 합니다. 그런 다음 .ssh/config클라이언트에 다음과 같은 항목을 추가하십시오.

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

이제 클라이언트에서 ssh private직접 접속할 수 있어야 합니다. 이는 scp및 에서도 작동합니다 sftp.

추가 크레딧

여러 서버에 대해 이를 사용하고 싶지만 게이트웨이에서 하나의 공개 키만 관리하려는 경우 다음 트릭을 사용할 수 있습니다. sshd기본적으로 특정 변수만 로컬 환경에서 수신되도록 허용합니다. 그 중 하나는 LC_PAPER거의 사용되지 않는 것입니다. 따라서 이를 사용하여 다음과 같이 서버의 호스트 이름을 전달할 수 있습니다.

먼저 공개 키 항목을 다음으로 변경합니다.

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

그런 다음 클라이언트에서 .bashrc파일(또는 사용하는 셸)에 다음과 같은 함수를 추가하세요.

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

그런 다음 원하는 경우 별칭을 만드십시오.

alias ssh=ssh_proxy

마지막으로 위에 표시된 것과 같은 Host섹션을 추가합니다. .ssh/config예를 들어:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

이제 게이트웨이에 있는 공개 키 하나만으로 ssh private작업을 수행할 수 있습니다 .ssh private2

관련 정보