임시 SSH 터널을 설정하기위한 Bash 펼쳐보기
Cygwin에서 Bash 펼쳐지는 다음과 있습니다.
- 원격 서버에 대한 SSH 터널을 작성하십시오.
- 터널을 사용하는 로컬 작업을 수행하십시오.
- 그런 다음 터널을 종료하십시오.
끔찍한 부분이 당황했습니다.
현재 저는 절름발이 해결책이 있습니다. 하나의 쉘에서 다음을 실행하여 터널을 만듭니다.
# 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
'IT' 카테고리의 다른 글
Android ListView 헤더 (0) | 2020.07.11 |
---|---|
기본 소리 알림을 사용 하시겠습니까? (0) | 2020.07.11 |
“return list.sort ()”가 목록이 아닌 None을 반환하는 이유는 무엇입니까? (0) | 2020.07.11 |
전체 오류 메시지를 표시하도록 web.config 파일을 설정하는 방법 (0) | 2020.07.11 |
파일 또는 어셈블리 "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a"를로드 할 수 없습니다. (0) | 2020.07.11 |