티스토리 뷰

IT

Teleport 프로그램

E_Sukmean 2018. 2. 19. 00:33

Teleport Github: https://github.com/gravitational/teleport


  SSH 접속 / 관리 프로그램을 소개해 보려고 한다. 설치및 사용은 이미 오래전부터 하고 있었으나, 시간도 별로 없었고 귀차니즘도 발동하여 이제야 글을 써본다. 이 프로그램은 서버측에 설치를 해야한다. 그렇기 때문에 자신의 서버가 없으면 사용이 불가능하다. 그러나 서버에 설치만 하면 바로 사용할 수 있고 심지어는 웹 SSH 클라이언트도 지원하기 때문에 활용도가 높다.


  hacker news에 몇번이나 Teleport 글이 올라왔었는데 그때마다 별 생각 없이 넘겼었다. 그러다가 필요하니까 딱 생각이 나서(!) 설치해 사용해 보게 되었다. Teleport의 주 특징은 다음과 같다

  • SSH 녹화 / 리플레이 기능
  • SSH 쉐어링 가능
    • 여러 사람이 동시에 한 SSH 세션에 접속가능
  • SSH 클라이언트 관리 기능
    • 기존 비밀번호 방식에서 벗어나서 간편하고 안전하게 SSH 접속가능
    • 자체 인증서 / 인증 시스템을 사용하기 때문에 웬만한 방법으로는 외부 유저가 SSH에 접근 불가
  • 방화벽(내부 IP)의 SSH 서버 접속가능
    • 노드(방화벽 뒤에 있는 서버)가 프록시(메인서버)로 연결 / 대기함
    • 내부 IP만을 가지는 VM 환경에서도 손쉽게 SSH 연결 가능
  • Google Auth와 같은 2차 인증기능도 있음
  • 웹 기반 SSH 접속도 가능 -> 이게 우리가 선택한 가장 큰 이유
  • tsh라는 자체 ssh 서버 / 클라이언트를 사용하긴 하나, openSSH또한 지원 사용가능함


  즉, SSH와 관련된 모든 관리를 해 주는 프로그램이라고 할 수 있다.


  기존에 사용하고 있던 Codeanywhere, Codetasty도 웹 SSH 접속을 지원은 하고 있다. 그러나 Vim이나 기타 CLI에서 이쁘장하게 만든 프로그램을 돌리면 만족스럽지 않게 표시되는 단점이 있었어서 찾다찾다가 Teleport로 넘어오게 되었다. 잘 믿기 힘든(만에 하나 서버 접속정보를 로깅하고 있다거나, 그런 정보들이 유출된다면?) 제 3의 서버를 경유하는것 보다는 내 서버에 직접 설치해 쓰는게 더 믿음직스럽기도 하다. 

  나는 웹 SSH 클라이언트만 보고 teleport를 사용하고 있는데, 내부 IP만을 사용하는 기기들의 SSH 접속 / 제어에도 큰 도움이 될 것 같다. 서버를 접속할때마다 포트 포워딩을 하는것 보단 저런걸 써보는게 더 간편할것 같기도 하다. 일부 사설 IP만을 제공해 주는 저가형 VPS 서비스에서도 사용해봄직 하다.



 설치

  설치 자체는 쉽다. https://github.com/gravitational/teleport/releases 에 있는 바이너리를 다운받고

sudo ./install
를 실행해 주기만 하면 된다. 알아서 바이너리 파일을 적절한 위치로 옮겨줄 것이다. (/usr/local/bin에 teleport 라는 실행파일이 복사될것이다.) 그리고는 그냥 프로그램을 실행하면 된다.

sudo teleport start 

설정

  설치는 쉬웠는데 설정이 어려웠다. 그렇게 유명한 프로그램도 아녀서 하나하나 문서를 읽으면서 찾아야했다.

  설정 파일의 기본 위치는 /etc/teleport.yaml이다. 파일이 없다고 당황할 것 없이 직접 파일을 만들면 된다. yaml 파일은 들여쓰기에 Tab을 허용하지 않는다! 스페이스 2칸이나 4칸으로 알아서 들여쓰기를 하자!

  Web UI의 포트는 3080이다. HTTPS가 꼭 되어야 한다. 적절한 인증서가 없으면 lets encrypt로 인증서를 발급받자.

구조

  우선 프로그램의 구조를 알아야 한다. teleport 프로그램은 Auth, Proxy, Node 3가지 역활로 구성되어 있다. Auth는 인증 서버로써의 역활을, Node는 각각의 sshd 역활을, Proxy는 외부에서 Node로 연결할 수 있는 통로를 만들어주는 역활을 한다.


어쨌든, 메인서버는 Auth와 Proxy이다. 그 두개가 있어야지 정상적으로 서버를 굴릴 수 있다.

샘플

아래는 내가 사용하고 있는 설정파일이다. 당장 저것만 편집해 써도 무방할것 같다.

auth_service:
  authentication:
    type: local
    second_factor: off

  listen_addr: 0.0.0.0:3025

proxy_service:
  enabled: yes
  web_listen_addr: 0.0.0.0:5050

  https_key_file: /etc/letsencrypt/live/인증서/privkey.pem
  https_cert_file: /etc/letsencrypt/live/인증서/fullchain.pem

  (auth) Google OTP등을 사용할 수 없는 상황이어서 우리는 2차 인증 시스템을 제외했다. second_factor를 적절히 수정하면 구글, Authy등을 사용할 수 있는듯 하다.

  (proxy) web_listen_addr로 웹 클라이언트의 bind할 IP와 포트를 바꿀 수 있다. 한편 teleport는 SSL를 꼭 필요로 하는듯 했다. 어쩔 수 없이 lets encrypt를 사용했다. 맨 마지막 두 줄 처럼 수정하니까 lets encrypt의 인증서도 잘 작동했다.


  그리고 sudo teleport start로 실행하면 auth, proxy, node가 모두 작동한다.


계정 생성

  teleport를 설치하고 실행했다고 해서 끝난것이 아니다. 우선 teleport에 사용할 계정을 만들어야 한다. 계정을 통해 접근할 수 있는 SSH를 제어할 수 있다.


sudo tctl users add 계정명


그러면 링크가 하나 나올것이다. 해당 링크로 들어가서 비밀번호등을 설정하면 된다.


노드 추가

sudo tctl nodes add

명령어를 입력하면 노드를 등록 할 수 있는 명령어가 나온다. (아래는 공식 문서에서 들고온 결과이다)

The invite token: n92bb958ce97f761da978d08c35c54a5c
Run this on the new node to join the cluster:
teleport start --roles=node --token=n92bb958ce97f761da978d08c35c54a5c --auth-server=10.0.10.1

  이 명령어를 사용하면 node 기능만 켜진 teleport 서버가 작동한다. auth-server의 IP만 잘 수정해 주면 된다. 추가된 노드는 아래의 명령어로 그 목록을 볼 수 있다.

tctl nodes ls

  물론 teleport로 node를 설치하지 않아도 ssh에 접속할 수는 있다. (tsh가 OpenSSH와 호환되기 때문이다) 그러나 방화벽 뒤로의 연결이나 내부 IP 접속등은 불가하다. (손수 포트포워딩을 해줘야 한다)


웹 UI

맨 마지막 사진은 내 서버로 접속해서 htop을 실행해본 모습이다. 여타 웹 기반 SSH 클라이언트와 달리 깔끔하게 잘 표시해 준다

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함