IT

임시 SSH 터널을 설정하기위한 Bash 펼쳐보기

lottoking 2020. 7. 11. 09:20
반응형

임시 SSH 터널을 설정하기위한 Bash 펼쳐보기


Cygwin에서 Bash 펼쳐지는 다음과 있습니다.

  1. 원격 서버에 대한 SSH 터널을 작성하십시오.
  2. 터널을 사용하는 로컬 작업을 수행하십시오.
  3. 그런 다음 터널을 종료하십시오.

끔찍한 부분이 당황했습니다.

현재 저는 절름발이 해결책이 있습니다. 하나의 쉘에서 다음을 실행하여 터널을 만듭니다.

# Create the tunnel - this works! It runs forever, until the shell is quit.
ssh -nNT -L 50000:localhost:3306 jm@sampledomain.com

그런 다음 다른 쉘 창에서 작업을 수행합니다.

# Do some MySQL stuff over local port 50000 (which goes to remote port 3306)

마지막으로, 완료 터널을 종료하기 위해 첫 번째 셸 창을 닫습니다.

이 모든 것을 하나의 펼쳐서 수행하고 싶습니다.

# Create tunnel
# Do work
# Kill tunnel

터널 프로세스를 추적해야합니까?


ssh 'control socket'을 사용하여 깨끗하게 할 수 있습니다. 이미 실행중인 SSH 프로세스와 대화하고 pid를 얻으려면 etc로 종료하십시오. 다음과 같이 '제어 소켓'(마스터의 경우 -M, 소켓의 경우 -S)을 소켓하십시오.

$ ssh -M -S my-ctrl-socket -fnNT -L 50000:localhost:3306 jm@sampledomain.com
$ ssh -S my-ctrl-socket -O check jm@sampledomain.com
Master running (pid=3517) 
$ ssh -S my-ctrl-socket -O exit jm@sampledomain.com
Exit request sent. 

my-ctrl-socket은 생성 된 실제 파일입니다.

OpenSSH 메일 링리스트의 RTFM 응답 에서이 정보를 얻었습니다 .


-f 옵션을 사용하여 SSH 자체를 백그라운드로 사용하여 $!로 PID를 얻지 못합니다. 또한 터널을 사용하기 전에 펼쳐보기를 임의의 시간 동안 휴면 상태로 유지하는 대신 -o와 함께 -o ExitOnForwardFailure = yes를 사용하면 SSH는 백그라운드에서 자신을 배치하기 전에 설정 될 때까지 대기합니다. ps의 출력을 grep하여 PID를 얻을 수 있습니다. 예를 들어

...
ssh -Cfo ExitOnForwardFailure=yes -NL 9999:localhost:5900 $REMOTE_HOST
PID=$(pgrep -f 'NL 9999:')
[ "$PID" ] || exit 1
...

원하는 PID를 얻었는지 확인하십시오.


  • 명령 행 플래그를 사용하여 다른쪽에 쉘을 만들지 말고 (터널을 열면) 이미 ssh배경으로 이동 지시 할 수 있습니다 .&-N
  • PID를 저장하십시오 PID=$!
  • 당신의 일을
  • kill $PID

편집 : 고정 $? ~에! &를 추가했습니다.


별도의 작업을 위해 새 셸을 시작하는 것을 선호하며 다음 조합 조합을 사용합니다.

  $ sudo bash; exit

또는 거기 :

  $ : > sensitive-temporary-data.txt; bash; rm -f sensitive-temporary-data.txt; exit

이 명령은 모든 작업을 수행 할 수있는 중첩 쉘을 만듭니다. CTRL-D를 완료하면 셸이 정리되고 종료됩니다. 중첩 된 쉘에서 로그 아웃 할 때 터널이 닫히도록 부품 bash;바로 전에 ssh 터널 확장에 쉽게 넣을 수 있습니다 kill.

#!/bin/bash
ssh -nNT ... &
PID=$!
bash
kill $PID

당신은 사용할 수 ssh&배경에 할 때 해당 ID를 잡기 위해 사용할 수 있습니다. 그런 다음 kill완료 해당 ID 를 수행해야합니다 .


또 다른 옵션 인 옵션-예상 패키지를 사용할 수 있습니다. 여기에 몇 가지 좋은 예가 있습니다. http://en.wikipedia.org/wiki/Expect

참고 URL : https://stackoverflow.com/questions/2241063/bash-script-to-set-up-a-temporary-ssh-tunnel

반응형