ssh 구성 파일 설정을 수정하여 세 번째 시스템으로 터널링


20

브리지 서버를 통해 서버로 터널링하려고합니다. 지금까지 다음 명령을 사용하여 명령 셸에서 올바르게 작동시킬 수있었습니다.

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

그러나 이것을 내 ~/.ssh/config파일 로 감싸려고했지만 문제가 있습니다. 난 노력 했어:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

그러나 내가 할 때 다음과 같은 오류 메시지가 표시되고 remoteserver.com원인이 무엇인지 잘 모르겠습니다.

ksh : SSH-2.0-OpenSSH_6.8 ^ M : 찾을 수 없음

나는 로그인 할 때 remoteserver.com내 쉘이 있다는 것을 알고있다 /usr/bin/ksh.

구성 파일의 ssh 명령에 경로 인수를 추가하려고 시도했지만 아무런 차이가 없었습니다.

어떤 아이디어가 될 수 있습니까?


그것은 단지 ProxyCommand사용되는 방법 이 아닙니다 . 일반적으로 ssh가 출력을 파이핑하고 netcat이 원격 서버 SSH 포트에 대한 터널 역할을하는 netcat과 함께 사용됩니다 . ssh -W %h:%p bridge_userid@bridgemachine.com해당 기능을 사용하려면 ProxyCommand가 필요 합니다.
DanSut

불행히도 내 브리지 서버에는 netcat이 설치되어 있지 않으므로 다른 방법으로 작동하려고합니다. 명령 줄에서 작동 할 수 있다면 정보를 구성 파일에 넣는 방법이 있어야한다고 생각했습니다.
Eric B.

ssh -A remote_userid@remoteserver.com브릿지 머신에서 실행할 명령으로 제공 되는 명령 행 사용법 에서 config는 기본 명령을 제공하는 방법을 제공하지 않습니다. 당신이 할 시도 무엇 works다음을 사용하는 ssh를 시도 자체에 있지만 ProxyCommand터널로하고 다른 쪽 끝에서 쉘 대기보다는 SSH 프로토콜을위한 SSHD 듣기가 어디 아래로 SSH 프로토콜을 발사하기 시작합니다.
DanSut

@ dansut는 훌륭하게 일했습니다. 고마워!
Eric B.

답변:


25

Jakuje의 대답 은 옳지 만 OpenSSH이기 때문에 더 쉽게 7.3사용할 수 있습니다 -J ProxyJump. 내 노트를 참조하십시오 :

OpenSSH 7.3이상

사용하십시오 ProxyJump. 매뉴얼에 설명 된대로 :

-J [user @] host [: port]
먼저 점프 호스트에 ssh 연결을 설정 한 다음 최종 목적지로의 TCP 전달을 설정하여 대상 호스트에 연결하십시오. 쉼표로 구분하여 여러 점프 홉을 지정할 수 있습니다. 이것은 ProxyJump 구성 지시문을 지정하는 바로 가기입니다.

ProxyJump ~/.ssh/config

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

와 연결하다

ssh server2_behind_server1 -v

-v자세한 출력을 위해 추가

ProxyJump -J명령 행 예

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

와 연결하다

ssh server2 -J server1 -v

또는 사용 -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4이상

ProxyCommand함께 사용-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

와 연결하다

ssh server2 -v

또는 사용 -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

OpenSSH 벨로우 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

와 연결하다:

ssh server2 -v

또는 사용 -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

출처

-JOpenSSH 7.3 에서 추가됨

  • ssh (1) : 하나 이상의 SSH 요새 또는 "점프 호스트"를 통한 간접적 인 간접 연결을 허용하도록 ProxyJump 옵션 및 해당 -J 명령 행 플래그를 추가하십시오.

-WOpenSSH 5.4에 추가됨

  • ssh (1)에 'netcat mode'를 추가했습니다. "ssh -W host : port ..."클라이언트의 stdio를 서버의 단일 포트 포워드에 연결합니다. 예를 들어 ssh를 ProxyCommand로 사용하여 중간 서버를 통해 연결을 라우팅 할 수 있습니다. bz # 1618

3

당신은 netcat당신의 다리에 필요하지 않습니다 . DanSut이 주석에서 제안한 것처럼 ssh -W대신 명령 행 옵션을 사용할 수 있습니다. 이 구성이 적합합니다.

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com

효과가있었습니다. 감사. 왜 그런지 잘 모르겠지만 이미 실패로 한 번 시도했지만 성공으로 다시 시도했습니다. 감사.
Eric B.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.