쉘 스크립트에서 백그라운드 프로세스로 터널을 관리하는 방법은 무엇입니까?


19

쉘 스크립트에서 두 개의 ssh-tunnel을 설정해야합니다. 나는 다음을 사용하여 bg 작업으로 실행하려고 시도했다.

#!/bin/sh
ssh -L 3000:server1:5029 me@server2 &
ssh -L 3001:server3:3306 me@server2 &

그러나 터널을 그렇게 시작하면 제대로 작동하지 않는 것 같습니다.

자체 탭에서 수동으로 설정하면 제대로 작동하므로 다음 아이디어는 터미널에서 새 탭을 열고 스크립트를 포 그라운드 프로세스로 실행하는 것입니다.

참고 : 이 질문은 원래 "쉘에서 새 터미널 탭을 시작한 다음 명령을 실행하는 방법은 무엇입니까?"였지만 터널을 다루는 방법에 대한 두 가지 대답이 있습니다. "쉘 열기"질문의 경우 백그라운드에서 새 탭이 열리는 전경 창보다 선호되지만 SuperUser 에서 이것을 발견 했습니다.


서버에 대한 활성 SSH 세션을 유지합니까? 즉, 백그라운드에 터널이 있고 실제로 작업중인 포 그라운드 SSH 세션이 있습니까?
Jack M.

지금까지, 나는 각 터널마다 하나씩, 다른 하나에는 탭을 3 개씩 열어 두었습니다. 내 실제 작업의 대부분은 Eclipse와 브라우저에서 이루어집니다.
sprugman

(터널은 로컬 Tomcat 인스턴스에서 일부 원격 DB에 액세스 할 수 있도록하기위한 것입니다.)
sprugman

답변:


26

이것은 기술적으로 묻는 질문에 대한 답변이 아니라 설명 된 문제에 대한 답변입니다. ssh 명령에는 유용한 두 개의 스위치가 있습니다.

ssh -f -N -L 3000:server1:5029 me@server2

ssh에게 필요한 암호를 요구하기에 충분한 시간 동안 포 그라운드에서 매달린 다음 원격 명령을 실행하지 않고 단지 터널을 처리하면서 백그라운드에 자신을 배치하도록 지시합니다.

이것이 실제로 탭에 나타나기를 원한다면 다른 해결책을 원할 수 있습니다.


키를 설정 했으므로 암호를 입력 할 필요는 없지만 작동하는 것 같습니다. 감사! 한 가지 질문 : 터널이 시간 초과되었는지 확인하거나 터널 등을 종료하려면 어떻게 터널에 액세스합니까? 그들에 대한 핸들 jobsps열거 하거나 열거 하지도 않습니다 ....
sprugman

2
ps -wwajx | grep ssh는 프로세스를 보여 주어야하며, 적절하다고 판단되면 프로세스를 종료 할 수 있습니다.
zzz

2
마지막에 -f프로세스를 생략 하고 배경을 지정하면 나중에 스크립트에서 터널 프로세스를 종료하는 핸들로 &PID를 얻을 수 있다고 덧붙이고 싶습니다 $!.
bk138

6

터널을 "무엇이든"연결에 통합하는 것이 좋습니다. ~/.ssh/config파일에 적절한 항목을 추가하여 쉽게 만들 수 있습니다 .

Host server2
    HostName 10.1.1.1
    User me
    LocalForward 3000 127.0.0.1:5029
    LocalForward 3001 127.0.0.1:3306

다음을 실행하여 간단히 로그인 할 수 있습니다.

> ssh server2

터널이 작동하여 작동하기 시작하면 "무엇이든"할 수있는 단일 SSH 인스턴스가 남게됩니다. 에 대한 두 번째 연결을 열어야하는 server2경우 오류가 발생할 수 있습니다.

> ssh server2
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3001
Could not request local forwarding.

이것은 눈 이외의 다른 것을 해치지 않습니다. 다른 서버에 유사한 회선을 추가하여 여러 서버에 대해 이러한 전달을 설정할 수 있으며 자동으로 발생합니다.


@zzz의 대답은 다소간 똑같은 일을하는 것처럼 보이며 조금 더 간단합니다. 그래도 고마워.
sprugman

이를 -f -N 옵션과 함께 사용하면 한 번에 여러 포트에 대한 포워딩을 설정할 수 있습니다. 고마워요
narsk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.