ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SSH 터널을 뚫어서 SFTP 서버에 접근하기
    programming 2019. 4. 8. 18:15

    SSH 터널을 뚫어서 SFTP 서버에 접근하기

    상황

                     +-----+
                     |local|
                     +-----+
                        |
                        |
                    SSH Tunnel
                        |
                        V
      +---------------------------------------+
      |proxy_username@proxy_address:proxy_port|
      +---------------------------------------+
                        |
                        |
              SFTP / SSH Connection
                        |
                        V
    +------------------------------------------+
    |server_username@server_address:server_port|
    +------------------------------------------+
    

    위와 같이 프록시 서버를 거쳐 SFTP 서버에 접근하고자 한다. WinSCP 같은 툴에서는 간단한 설정으로 터널을 통한 접속이 가능하지만, FileZilla나 CyberDuck 에서는 해당 기능이 지원되지 않는다. 따라서 직접 SSH 터널을 개설하고 해당 터널을 이용해 접속해야 한다.

    해결

    SSH 터널 개설

    로컬 상 임의의 포트를 열어 서버 주소와 연결해야 한다. 열려있는 포트를 알고 있다면 해당 포트 넘버를 이용하면 된다. 그렇지 않으면 아래와 같이 파이썬으로 빈 포트를 찾을 수 있다. 파이썬에 socket 모듈에서 0번 소켓으로 바인딩하면 자동으로 빈 소켓을 찾아 연결하는 것을 이용하는 스크립트이다.

    python -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()'

    비어있는 로컬 포트를 찾았으면 터미널에서 다음과 같이 SSH 터널을 개설한다.

    ssh -L local_port:server_address:server_port proxy_username@proxy_address -p proxy_port

    비밀번호를 입력하라는 메시지가 나오면 프록시 계정 비밀번호를 입력한다.

    SFTP 접속

    이제 localhost:local_port 으로 접속하면 server_address:server_port 으로 연결된다. FileZilla 같은 SFTP 클라이언트에서 다음과 같이 접속한다.

    Host:       sftp://localhost
    Username:   server_username
    Password:   server_password
    port:       local_port

    정상적으로 SFTP 연결이 된 것을 확인한다.

    SSH 접속

    터미널에서 서버에 SSH로 접속해야 하는 경우에도 위와 동일하다. 터미널에서 다음과 같이 입력한다.

    ssh server_username@localhost -p local_port

    비밀번호를 입력하라는 메시지가 나오면 서버 계정 비밀번호를 입력한다.

    댓글

Designed by Tistory.