빠른 SSH 접근을 위한 스크립팅

2 분 소요

개요

최근에는 서버 접근 시 다이렉트로 SSH접근을 하지 않고, 중간에 배스천 호스트와 같은 게이트웨이를 거쳐서 진입하는 것이 일반적이다. 이러한 환경에서 원하는 서버에 접근하기 위해서는 수작업으로는 몇단계에 걸친 작업을 진행하여야만 진입이 가능하다. 이를 보다 빠르게 하기 위한 스크립팅 가이드에 대한 예제이다.

  • Windows 환경에서는 일부 Shell를 이용할 수 있는 환경에서 진행하여야 하며, 개인적으로는 윈도우의 우분트 베이스 쉘보다는 MobaXterm 프로그램을 이용하기를 추천한다.
  • MAC의 경우 Shell환경을 사용할 수 있기에 별도의 프로그램 추천은 하지 않는다.

MobaXterm

  • Windows 환경에서 다양한 프로토콜에 대한 접근을 지원하는 터미널 프로그램
  • 자체적인 터미널은 shell과 같은 형태를 지원하며 apt-get 을 통하여 추가적인 플러그인을 설치 가능
    • 해당 가이드는 리눅스 CLI의 상호작용을 위한 패키지인 expect를 기반으로 하고 있음으로 플러그인에서 expect를 설치하여야 한다.
      • 처음 실행화면에서 ➕버튼을 누름으로서 자체적인 터미널에 진입 가능
      • 진입 후 아래 커맨드를 통하여 expect 설치한다.
        apt-get install expect
    • expect의 자세한 내용은 링크를 참조한다
  • 라이센트 정책
    • Home EditionProfessional Edition 으로 나눠져 있다. 이름만으로는 기업에서는 유료인 Professional Edition 만을 사용해야 할 것 같지만 기업에서 Home Edition을 사용하여도 무관하다.
    • 두 에디션의 차이는 최대로 접근 가능한 세션수 등 일부 제한적인 기능에 있으나, 경험상 특별한 케이스가 아니면 전혀 사용하는데 문제가 없다.
    • 홈 에디션 라이센스에서 5. 1 Right of use 에 내용을 보면 상업용, 회사환경에서 사용하여도 무관하나, 설치의 경우 해당 프로그램을 사용할 최종적인 유저가 설치하고 사용하는 사람과 설치한 사람이 동일하면 문제가 없다고 말한다.

      Individual end-user is allowed to download (only from MobaXterm website: https://mobaxterm.mobatek.net) and to use MobaXterm Home Edition in a commercial or company environment.
      However, software installation must be performed by the end-user himself: the user who uses MobaXterm Home Edition inside a company must be the same person who downloaded the software and installed it.

  • MobaXterm의 자체 터미널의 경우 기본적으로 /home/mobaxterm 경로를 보이며 이는 Windows에서 C:\Users\사용자계정\Documents\MobaXterm\home 과 동일한 경로라고 볼 수 있다.
    • 일종의 가짜 shell(?) 임으로 chmod와 같은 파일 권한명령어를 해도.. 정상적으로 동작하지는 않는다
    • 예를들어 chmod 700 으로 권한을 바꿔도.. 그냥 660 rw-rw---- 으로 보인다.
      • 그래도 실행은 잘된다.

SSH 접근 스크립트 예제

  • MobaXterm(또는 mac에서 터미널)에서 expect를 이용하여 빠르게 원하는 서버로 접근하기 위한 스크립트의 예제이다.
    • HOST~JUMP_SERVER까지 필요사항에 따라 수정
    • password부분은 설정에 따라 주석 해제
    • env로 받는 부분은 원하는 방식대로 수정
  • expect를 이용하여, 서버 접속 후 순차적으로 자동으로 명령어를 날려 접근하는 원리
  • 기존의 GW 접근 → GW2(alias) → TARGET(alias)
    • alias가 각 서버에 등록되어 있어, 단순하게 사용한거긴 한데 케이스에 따라 일반적인 커맨드로 대체해도 무관
#/bin/sh

case $1 in
    TARGET1|TARGET2)
    HOST=GatewayIP
    PORT=GatewayPort
    USERNAME=Account
    PASSWORD=Password
    JUMP_SERVER=GW2

    expect -c "
    spawn ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${USERNAME}@${HOST} -p ${PORT}
    # 만약 패스워드 입력 없이 로그인 가능하도록 이미 설정된 경우 패스워드 입력 부분은 주석처리한다.
    # MobaXterm의 최초 로그인 후 패스워드 없이 자동접속 체크하여도 패스워드 안묻고 그냥 로그인 되버려서 아래와 같이 주석 처리를..
    # expect \"Password:\"
    # send \"${PASSWORD}\\r\"
    expect \"\\r\"
    send \"${JUMP_SERVER}\\r\"
    expect \"\\r\"
    send \"$1\\r\"
    interact
    "
  ;;
  *)
    echo "not define server"
  ;;
esac
  • 테스트결과 최종목적지까지 명령어 한번에 접근 가능하다. Image

추가적인 로컬 alise 설정을 이용한 완성

MobaXterm에 내장된 터미널에서도 /etc/bash_profile 을 수정할 수는 있지만, 프로그램이 재시작된경우 편집한 내용이 초기화 된다. 따라서 .bashrc 를 이용하기로 하자.(맥이라면 뭐가 되었든..)

cd ~
touch .bashrc
vi .bashrc

# 아래 내용 추가~~
alias conn='/home/mobaxterm/conn'
alias target1='conn target1'
alias target2='conn target2'
# 여기 까지

추가된 설정에 대한 파일은 C:\Users\사용자계정\Documents\MobaXterm\home 에서 역시 확인이 가능하다. 즉 윈도우 환경에서 편집해도 무관하다. Image

터미널에서 alias가 잘 성정되었는지 확인해본다. .bashrc 를 이용하는 것이니, 터미널을 다시 실행하던지 source .bashrc 명령으로 내용을 적용 후 테스트한다, Image

댓글남기기