Home [Tips] SSH를 통해 원격 서버 내 Docker Container의 Shell에 곧바로 접속하기
Post
Cancel

[Tips] SSH를 통해 원격 서버 내 Docker Container의 Shell에 곧바로 접속하기

나는 현재 원격 서버에 컨테이너를 띄워두고, 그 안에 접속하여 실험을 진행하고 있다.

이처럼 원격 서버에서 Shell 환경을 제공하는 컨테이너를 올려두고 사용 중이라면,
원격 서버 접속 후 docker exec을 실행해야 하는 <로컬 → 원격 서버 → 도커 컨테이너 접속> 의 단계를 거치기보다,
곧바로 <로컬 → 도커 컨테이너 접속> 의 단계를 거치는 편이 편리하다.

하지만 다음과 같이 별다른 작업 없이 로컬 환경에서 ssh 명령어에 원격 서버에서 도커 컨테이너가 사용 중인 포트 번호를 입력한다고 해서 접속이 가능한 것은 아니다. (나의 경우에는, Bad Connection 에러가 발생했다.)

1
ssh [host-name] -p [container-port]

이는 컨테이너 내부 shell의 shell server가 실행되고 있지 않기 때문이다!


원격 서버 내 Docker Container의 Shell Server 켜기

  1. 원격 서버에 접속 후, 해당 도커 컨테이너에 들어간다.

  2. shell server의 상태를 확인한다. 이때, not running 상태이면 켜주어야 한다.

    1
    2
    
    service ssh status # systemctl 명령어로도 가능
    # * sshd is not running
    
  3. sshd_config 파일을 열고, PermitRootLogin 항목을 Yes 변경한다.

    1
    
    sudo vim /etc/ssh/sshd_config
    

  4. shell server를 켜주고 다시 상태를 확인한다.
    1
    2
    
    sudo service ssh start
    service ssh status
    

  5. 로컬 환경의 터미널에서 ssh -p 옵션으로 컨테이너의 포트 번호를 넣었을 때, 곧바로 컨테이너 내 shell로 접속되는지 확인한다.

    접속 시에 password를 입력해야 한다면, 해당 password는 원격 서버의 password가 아닌 컨테이너의 password이다!

  6. ssh 접속 시 편리하게 별명을 사용하기 위해서 ~/.ssh/config에 컨테이너 포트 옵션을 추가한 호스트를 추가한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    # 원격 서버
    Host remote-server
        HostName  123.456.789.000
        User sryou
    
    # 원격 서버 내 컨테이너
    Host remote-server-container
        HostName  123.456.789.000
        User sryou
        Port 2226   # -- container의 port
    


VSCode에서 Docker Extension 없이 Remote-SSH로 곧바로 Container 접속하기

위의 설정을 마치면 로컬 환경에서 곧바로 원격 서버 내 컨테이너 내부로 접속할 수 있기 때문에 VSCode에서도 Docker extension 없이, Remote-SSH 만으로도 컨테이너 환경을 사용할 수 있다.

하지만 컨테이너 내부에 curl 또는 wget이 설치되어 있지 않다면, 첫 Remote-SSH 접속 시에 VSCode Server를 설치할 수 없다는 오류가 발생할 수 있다.


wget을 설치하는 방법은 다음과 같다.

  1. 컨테이너 내부에서 다음을 수행한다.

    1
    2
    
    sudo apt-get update
    sudo apt-get upgrade
    
  2. wget을 설치한다.

    1
    
    sudo apt-get install wget
    


이렇게 설치 후 다시 Remote-SSH 접속을 시도해보면 VSCode Server가 잘 설치됨을 확인할 수 있다.


따라서 더이상 로컬 환경에서 ssh로 원격 서버 접근 후, docker exec -it 할 필요 없이, 로컬 환경에서 ssh 및 VSCode를 통해 곧바로 컨테이너 내의 shell로 접근 가능하다.

이러한 점에서 더 편리할 뿐만 아니라, VSCode 내에서 Jupyter Notebook을 사용할 때 걸리는 delay가 체감상 크게 감소하였다.


Container 내에서 conda 명령어가 동작하지 않는 문제 해결

위와 같이 설정을 완료했는데, 컨테이너로 곧바로 접속한 경우에는 파이썬 가상환경을 위해 사용하는 conda 명령어가 동작을 하지 않는 이슈가 발생했다. 이는 다음과 같이 해결했다.

  1. 원격 컨테이너에 위의 방법들을 통해 곧바로 접속한 후, conda의 실행 파일이 저장된 디렉토리로 이동한다.

    1
    
    cd /opt/conda/bin
    
  2. 실행 파일을 이용하여 conda init [shell-name]을 실행한다. (나는 zsh을 이용 중이다.)

    1
    
    ./conda init zsh    # shell 종류에 따라 다르게 입력한다.
    

  3. exit 후 다시 해당 컨테이너에 곧바로 접속한다.

    1
    2
    3
    
    exit
        
    ssh remote-server-container
    
  4. conda 명령어가 동작함을 확인한다.

This post is licensed under CC BY 4.0 by the author.

[Tips] Vim 에디터에 Syntax Highlighting 적용하기

[Blog] Chirpy Theme GitHub Actions Deploy 오류 해결