사용자 도구

사이트 도구


ssh:turnnel

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
ssh:turnnel [2025/04/20 15:08] – 제거됨 - 바깥 편집 (Unknown date) 127.0.0.1ssh:turnnel [2025/04/20 15:08] (현재) rex8312
줄 1: 줄 1:
 +====== SSH: Turnnel ======
 +
 +===== 요약 =====
 +
 +client - 방화벽 - proxy(중계서버, 접속가능한 서버) - 방화벽 - server(작업용)
 +
 +  * (1) server에서 proxy로 접속
 +
 +<code bash>
 +ssh -R 2222:localhost:22 {proxy_ip)
 +</code>
 +
 +  * (2) client에서 proxy로 접속
 +
 +<code bash>
 +ssh -L 2222:localhost:2222 {proxy_ip)
 +</code>
 +
 +  * (3) client에서 server로 접속
 +
 +<code bash>
 +ssh localhost -p 2222 
 +</code>
 +
 +  * 또는 (2)대신 proxy에서 server에 직접 접속
 +
 +<code bash>
 +ssh {proxy_ip}
 +ssh localhost -p 2222
 +</code>
 +
 +===== 상세 =====
 +
 +클라이언트의 ~/.ssh/config 에 다음 내용 추가
 +  * [[https://askubuntu.com/questions/127369/how-to-prevent-write-failed-broken-pipe-on-ssh-connection]]
 +<code>
 +  Host *
 +      ServerAliveInterval 120
 +</code>
 +
 +외부에서 접속하고자 하는 서버에서 실행
 +
 +<code bash>
 +ssh -R 2222:localhost:22 -R 6006:localhost:6006 -R 8888:localhost:8888 {server-id}@{server-ip}
 +# {server-ip} 는 외부에서 접속이 가능한 서버
 +</code>
 +
 +외부의 클라이언트에서에서 로컬 포트 포워딩으로 서버 접속
 +
 +<code bash>
 +ssh -L 2223:localhost:2222 -L 6006:localhost:6006 -L 8888:localhost:8888 {server-id}@{server-ip}
 +</code>
 +
 +다른 창에서 로컬호스트에 접속
 +<code bash>
 +ssh localhost -p 2223  # tb (6006), jupyter (8888)은 웹브라우저로 접속
 +</code>
 +
 +또는, 외부 컴퓨터에서 서버에 접속 후 로컬의 2222에 접속
 +
 +<code bash>
 +ssh {server-id}@{server-ip}
 +ssh localhost -p 2222
 +</code>
 +
 +  - [[http://linux.systemv.pe.kr/ssh-%ED%8F%AC%ED%8A%B8-%ED%8F%AC%EC%9B%8C%EB%94%A9/|SSH 포트 포워딩]]
 +  - [[https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding]]
 +  - [[http://qgp9.github.io/blog/2016/03/26/ssh-proxy-jump-host#%EC%B6%94%EC%B2%9C%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95---proxycommand|SSH Proxy 와 점프호스트(경유서버를 이용한 목적서버 연결)]]
 +  - [[https://medium.com/dynamic-python/automatic-ssh-tunnels-6eb3ac4c2ad]]
 +
 +
 +
 +
 +<code python lab.py>
 +import argparse
 +from subprocess import run
 +from shlex import split
 +from socket import gethostname
 +import time
 +from colorama import Fore, init
 +from tqdm import trange
 +
 +SERVER = '${SERVER}'
 +init(autoreset=True)
 +
 +parser = argparse.ArgumentParser()
 +parser.add_argument('-P', '--port', default=2222)
 +args = parser.parse_args()
 +
 +nx = gethostname()
 +cmd = 'ssh -R {}:localhost:22 {}'.format(args.port, SERVER)
 +
 +while True:
 +    print('CMD:', cmd)
 +    print(Fore.LIGHTBLUE_EX + 'Connecting..')
 +    rus = run(split(cmd))
 +    print(Fore.LIGHTRED_EX + 'Disconnected, retry after 30 sec.')
 +    for _ in trange(30):
 +        time.sleep(1)
 +</code>
 +
 +{{tag>ssh}}
 +