ssh multi-hop… ssh 설정 파일에 맞게 명령 조정


10

다중 홉 ssh 명령을 ssh .ssh / config 파일에 넣으려고합니다.

이것은 나의 연결 그래프입니다 : laptop (나는 여기 있습니다) ------> userver -------> workstation

ssh 공개 rsa 키를 'userver'및 'workstation'에 넣었습니다. 현재이 줄을 입력하여 연결할 수 있습니다.

ssh -A -t userserver@userver ssh -A userworkstation@workstation

그러나 ~ / .ssh / config의 구성 파일 기능을 사용하여 동일한 효과에 도달하지만 하나의 간단한 명령을 사용하여 'scp'로 빠른 복사를 수행 할 수 있기를 바랍니다. 유일한 문제는 'userver'에 "nc"명령이 없으며 거기에 수퍼 유저가 없으며 내 홈 폴더를 제어한다는 것입니다. 그럼에도 불구하고, 나는 몇 가지 시도했다.

내 노트북 ​​에이 구성 파일이 있습니다 (~ / .ssh / config) :

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

또한 사용자의 다른 구성 파일 (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

이 구성 파일을 사용하여 다음과 같이 연결할 수 있습니다

ssh -A -t userver ssh -A workstation

그것은 개선이지만 충분하지는 않습니다. 랩톱 구성에 다음과 같이 다른 호스트를 추가하려고했습니다.

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

그럼 내가 할 때

ssh hop

오류가 발생하여 다음과 같은 결과가 나오고 연결할 수 없습니다.

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

어떤 아이디어?

답변:


6

필요한 명령은입니다 ProxyCommand.

.ssh / config 파일에 다음 줄을 넣어야합니다.

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

이제 다음 방법으로 PC 워크 스테이션에 연결할 수 있습니다

  ssh worksation

이것이 명확하지 않거나 자세한 내용을 원한다면 ssh multi-hopping에 대한 이 훌륭한 소개 를 읽는 것이 좋습니다 .

편집하다:

항상 별칭을 정의 할 수 있습니다. /home/your_name/.bashrc 파일에서 다음 행을 추가하십시오.

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

( -X원격 서버에서 그래픽 응용 프로그램을 실행할 수 있도록 옵션 을 삽입 했습니다. 로컬에서 확인하십시오. 원하지 않는 경우을 삭제하십시오 -X).


안녕하세요 MariusMatutiae, 솔루션을 시도했지만 원래 게시물에서 말했듯이 'userver'노드에는 netcat (nc) 프로그램이 없습니다. ssh workstation bash : nc : command not found ssh_exchange_identification : 원격 호스트에 의해 연결이
끊어졌습니다

설치할 수 없습니까?
MariusMatutiae

불행히도 아니요, 'userver'에 수퍼 유저가 없으므로 다른 방법을 시도하고 있습니다. 이것이 "ssh -A -t userver ssh -A 워크 스테이션"으로 작동하면 왜 ProxyCommand를 똑같이 넣지 않습니까?
labotsirc

1
@ labotsirc 나는 내 대답을 약간 수정했습니다. 도움이 되길 바랍니다. 또는, netcat을 로컬로 설치하여 (예를 들어, 여러분만을 위해!) Proxycommand .... 행에 자신의 netcat 사본에 대한 전체 경로를 추가하십시오. 권한 때문에 이것이 작동하는지 확실하지 않지만 시도해 볼 수 있습니다.
MariusMatutiae

netcat 바이너리를 복사하여 오류가 발생하여 -q0 옵션을 제거했으며 이제는 작동합니다! 감사합니다
labotsirc

10

nc다른 예제 에서처럼 netcat ( )을 사용하는 것보다 다음 솔루션이 훨씬 더 효과적이라는 것을 알았습니다 . netcat을 사용하면 연결 속도가 매우 느려서 일부 키를 누를 때까지 반복적으로 중단됩니다. 또한 netcat을 설치할 필요가 없습니다.

에 다음을 추가하십시오 ~/.ssh/config.

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

그런 다음 다음과 같이 ssh 할 수 있습니다.

ssh workstation

또한 당신 ProxyCommand이 일하지 않는 이유 는 당신이 무엇을 얻지 못하기 때문 ProxyCommand입니다. SSL 연결을 만들 수 ProxyCommand있는 파이프를 만들어야 ssh합니다. 즉, 명령은 stdinstdoutsshsshd포트에 연결 되는 프로세스를 시작해야합니다 . 구성에서 포트가 아닌 명령 쉘에 ProxyCommand연결 하는 ssh 연결을 작성 중 입니다.sshsshd

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.