외부에서 private망에 물린 host로 접속하기 – SSH Jump Host

사무실에 있는 내 workstation에는 두개의 LAN이 연결되어 있고 각각 public network와 private network에 연결되어있다. 외부에서 private network에 연결되어 있는 target host에 SSH로 연결 할 때는 먼저 workstation에 ssh로 연결하고, 여기에서 private망에 물려있는 target host로 또 다시 ssh를 연결해야 한다.

하지만 ssh의 -J option을 이용하면 workstation을 jump host로 이용해서 이런 귀찮은 여러번 접속을 피할 수 있다. 다음은 ssh의 -J 옵션에 대한 설명을 man-page에서 발췌해서 의역한 것이다.

-J 목적지
    Jump host에 ssh 연결을 생성한 다음 최종 목적지 호스트로 TCP 포워딩을 설정하여
    연결을 생성합니다. 여러개의 jump host를 명시하려면 콤마를 사용해서 지정해 줄 수
    있습니다. 이 옵션은 ProxyJump 환경설정 예약어에 대한 단축설정 입니다. 
    주의: 일반적으로 명령줄에 작성하는 옵션들은 최종 목적지 호스트에 적용되며 jump host
    들에는 적용되지 않습니다. Jump host에 옵션을 설정하려면 ~/.ssh/config file을
    활용 하세요.

예를 들어 workstation의 public IP가 203.0.113.5, private network에 있는 target의 IP가 192.168.100.5라 할 때 다음과 같이 203.0.113.5를 jump host로 설정해서 한 번에 접속할 수 있다.

ssh -J user@203.0.113.5 user@192.168.100.5

이러한 설정을 .ssh/config에 jump host를 명시해서 설정해 두면 workstation을 jump host로해서 target에 접속할 수 있고 무엇보다도 visual studio code에서도 곧바로 접속할 수 있다는 점이 편하다. 아래의 설정에서 ProxyJump 설정하는 부분을 눈여겨 보자.

Host workstation
  HostName 203.0.113.5
  User user

Host target
  HostName 192.168.100.5
  User user
  ProxyJump workstation

설정 후에는 private IP인 target으로 곧바로 접속 할 수 있다.

ssh target

Mac OS X에 PlantUML 환경설정

예전에 포스팅 했던 내용 처럼 PlantUML은 on-premise 서버에서도 사용이 가능하지만, Visual Studio Code에서 제공되는 PlantUML extension을 사용하면 Tomcat같은 JSP서버를 별도로 설치할 필요가 없어서 IDE를 벗어나지 않고도 개발을 진행 하면서 관련내용을 스케치하기에 무척 편하다.

Linux에서도 마찬가지 이지만 Max OS X에서 Visual Studio Code PlantUML extension을 사용하려면 Java와 Graphviz가 설치되어 있어야 한다.

Java는 이미 잘 문서화 되어 있으니 내 Mac에 Java를 설치하려면 어떻게 하나요?와 같은 문서를 참조하면 된다.

Mac OS X에서 Graphviz는 HomeBrew 혹은 MacPort를 통해 설치할 수 있다. 나는 MacPorts를 사용하고 있으므로 다음 명령으로 설치했다.

sudo port selfupdate
sudo port install graphviz

PlantUML은 Graphviz없이도 sequence diagram은 그릴 수 있지만, class diagram를 그리려면 Graphviz가 있어야 한다. 다음과 같은 간단한 시험용 PlantUML 문서를 하나 작성하고 동작을 확인해 본다.

@startuml
testdot
@enduml

설정이 잘되어 있다면 다음과 같이 보이고 것이고, 문제가 있다면 관련된 오류가 표시된다.

MacPorts: Orange3 Text Add-on 추가할 때 오류

오래된 Intel Mac은 Monterey이후 업데이트가 지원되지 않기 때문에 최신 버전의 Homebrew도 사용할 수가 없다. 이 때문에 MacPorts를 사용하는데 Orange3에 Text add-on을 설치를 시도할 때 Arch Linux에서와 같은 gensim버전 문제가 생겼다(참조: Arch Linux에서 Orange3 Text add-on 설치문제 해결).

2025년 10월 현재 최신버전인 gensim 4.3.3의 Python version 불일치 때문에 발생하는 문제인데, Arch Linux에서는 이 문제를 Python3.13대신 Python3.12의 가상환경을 만드는 것으로 해결 했었다.

MacPorts환경에서의 default python version을 확인해 보면 오래된 3.6을 가리키고 있는데, Python3.12를 설치해 준 다음 default python version을 3.12로 변경해서 이 문제를 해결할 수 있다.

먼저 MacPorts로 Python3.12를 설치해준다.

# Python3.12 설치
sudo port install python312

그리고 나서 default로 실행되는 python / python3 명령어를 Python3.12로 변경한다.

# python과 python3 명령어에 대한 인터프리터 지정
$ sudo port select --set python3 python312
Selecting 'python312' for 'python3' succeeded. 'python312' is now active.

$ sudo port select --set python python312 
Selecting 'python312' for 'python' succeeded. 'python312' is now active.

# 확인
$ port select --list python 
Available versions for python:
	none
	python312 (active)
	python313

이제, Orange3를 재실행하고 Text add-on을 추가하면 오류없이 설치되어 사용할 수 있다.