여러 호스트를 통한 ssh


37

사무실에서 내 컴퓨터에 도착하려면 지금이 작업을 수행하십시오.

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
me@unix.department:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

이 프로세스를 자동화하는 쉬운 방법이 있습니까, 아마도 내 마지막에 사용할 수있는 단일 명령일까요?


답변:


31

로그인시 ssh 클라이언트를 사용하여 원격 시스템에서 ssh를 실행할 수 있습니다.

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(내 -t호출에 포함시키는 이유 는 ssh가 나에게 오류를 주었기 때문이다. 내 컴퓨터에서 터미널을 시도했을 때 stdin이 아닌 stdin; 컴퓨터가 다를 수 있습니다.)

마지막 쉘에서 나가면 프로세스가 체인 종료되어 입력을 Ctrl-D반복해서 저장 합니다.


참고 : 원격 컴퓨터에서 로그인 만하는 경우에만 "-t"를 추가하십시오. 원격 컴퓨터에서 명령을 시작하려면 일부 항목을 손상시킬 tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " 수 있으므로 손상 시키지 마십시오 (예 : : 추가하면 손상 될 수 있습니다 -t! 멋진 StephaneChazelas의 답변 unix.stackexchange.com/questions/151916/ … )
Olivier Dulac

3
로컬 컴퓨터에 모든 ssh 키를 저장할 수 있으므로 -J를 사용하는 것이이 답변보다 안전합니다. @Miikka에서이 질문에 대해 언급 한 바와 같이 -J 옵션은 OpenSSH의 버전 7.3에 도입 된
에릭 Sjölund을

1
@ ErikSjölund Openssh는 하나 이상의 -J옵션을 허용하지 않습니다 . 나는 당신이 ProxyCommand당신의 구성에서 여러 옵션으로 그것을 할 수 있다고 생각합니다 .
amphetamachine

1
@amphetamachine -J쉼표로 구분 된 홉 목록을 지정할 수 있습니다. 그러나 지원하기에 너무 오래된 버전을 사용하는 경우 ProxyCommandwith -W를 사용하는 것이이 답변보다 훨씬 더 나은 방법 -J입니다.
kasperd

35

예, ssh ProxyCommand와 netcat을 사용하는 좋은 방법이 있습니다.

.ssh / config에 이와 같은 것을 넣으십시오.

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

이는 jump / bastion 호스트 unix.university.com을 사용하여 .department.university.com 서버에 직접 로그인합니다. unix.university.com에 대한 스탠자가 직접 필요할 수도 있습니다.

작동 방식을 설명하는 링크는 다음과 같습니다. http://backdrift.org/transparent-proxy-with-ssh

이 기술로, 당신은 지금 쓸 수 있습니다

ssh unix.department.university.com

그리고 그것은 모두 직접 나타납니다. rsync, scp 등과 같은 도구 (ssh 스택의 모든 것)도 투명하게 작동합니다.


2
+1 스테이징 서버를 통해 테스트 네트워크에서 Prod 네트워크로 데이터를 푸시하기 위해 이와 비슷한 것을 사용합니다.
Arcege

2
그렇습니다, 이것은 잘 작동합니다!
개브.

15
레코드의 최신 버전의 ssh가 -W옵션을 지원하기 위해 ProxyCommand ssh -W %h:%p gatewaync에 의존하는 대신에 다음과 같은 작업을 수행 할 수 있습니다
Ulrich Dangel

알아 둘만 한! Thx
Aaron Brown

2
사용자 이름이 여러 시스템에서 동일하면 효과적입니다. 그것이 다르다면ProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu

9

OpenSSH 7.3에서 ssh는 이 문제를 정확하게 해결하기 위해 -J명령 행 플래그와 해당 ProxyJump구성 옵션을 추가했습니다 .

ssh하려는 호스트를 쉼표로 구분 된 목록으로 제공하십시오 -J. 예를 들면 다음과 같습니다.

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com

-5

SSH 터널링. 나는 이것을하는 방법을 정확하게 기억하지 못하지만 기본적으로 기계가 별도의 포트에 연결하여 터널을 허용하는 방법이 있다는 것을 알고 있습니다. 이렇게하면 동일한 초기 시스템 (예 : 다른 포트)으로 쉘하면 최종 위치로 넘어갑니다.

그래도 구성 방법을 찾아야합니다.

:)


당신은 원하지 않는 (아마 당신은 할 수 없음) 포트 또는 대학 SSH 게이트웨이 ... 열
스테판 히메네스

9
어떻게해야할지 모르고 찾아 보지 않아도된다면 왜이 답변을 게시 했습니까?
amphetamachine

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