develop

termius 와 remote -ssh 와 ssh 프로토콜

crab. 2023. 1. 20. 16:06

사용 배경

  • 다른 대학교에 있는 서버를 원격 접속해서 테스트를 해야하는 상황이 발생했다.

termius란?

  • ssh 클라이언트 중 하나입니다. (자매품 putty)
  • 자신의 컴퓨터의 alias, hostname, username, password를 적고 port번호는 ssh일때 22번으로 지정해서 쓰기 때문에 22번으로 하면
  • 지정한 컴퓨터의 terminal로 접속할 수 있습니다.
  • 더 자세한 설명을 위해 레퍼런스가 많은 putty로 다시 설명하겠습니다.

putty란?

  • 가상 단말기 프로그램입니다.
  • 서버는 물리적으로 떨어져 있어도 단말 장비를 통해서 원격으로 접속하여 작업할 필요가 있는데
  • 이때 윈도우같은 개인 pc 운영체제에서도 서버로 접속할 수 있도록 물리적인 단말장비가 아닌 논리적인 가상 단말기를 제공합니다.
  • 접속 방식으로는 Telet, SSH, Rlogin 등 다양한 방법을 제공하고 있고 가상 단말기로서 가볍고 다양한 설정이 가능한 무료 오픈소스 프로그램입니다.

  • 2번의 Host Name 란에 서버의 주소 또는 호스트네임을 적고
  • 3번에서 포트번호를 적은 후 (ssh의 경우 22번)
  • 4번에서 그 접속 방식을 선택해주면 됩니다.
  • 성공하면 접속한 컴퓨터의 평소 터미널처럼 이용하면 됩니다.

간단히 보는 ssh type 통신과 그 목적

  • SSH Type
    • 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사 할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다.
    • 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다.
    • 기본적으로는 22번 포트를 사용한다. SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 보인다.
  • 목적
    • IDC센터에 별도로 관리되고 있는 서버에 무언가 작업을 위해 매번 IDC센터에 방문하여 출입 허가 받고,
    • 서버에 직접 접속하는 것을 대신하여 다른 장소에서 원격으로 접속하여 작업을 할 수 있도록 한다.

remote-ssh

  • 가상머신 혹은 외부 컴퓨터의 리눅스에 접속해서 파일이나 소스를 수정할 일이 있다고 하자.
  • 보통이라면 putty 같은 ssh 툴로 접속해서 vim 에디터를 이용해서 수정할 것이다. ...하지만 불편하다.
**SSH 란 무엇인가?**

SSH란 Secure Shell의 약자로 원격 접속을 이용하여 터미널 환경을 사용할 수 있도록 고안된 인터넷 프로토콜이다.

SHELL로 원격 접속을 하는 것이므로 기본적으로 CLI상에서 작업을 하게 되고, 기본 포트는 22번이다.

자주 사용되는 SSH접속 프로그램으로는 Xshell, PuTTY, MobaXterm 등이 있다.
  • 나의 경우가 이런 경우였는데 처음에는 termius를 사용하려 했다가 서버의 파일을 직접 수정해야 할 일이 생겼고 그 파일을 일일이 vim으로 수정하기에는 생산성이 별로 안 좋았다.
  • 그래서 이 remote-ssh 를 사용하게 되었다.
  • 말그대로 putty같이 vscode에서 SSH로 원격 서버에 접속한뒤 서버 폴더 트리를 뒤져 프로젝트 폴더로 들어간뒤 프로젝트 디렉토리를 vscode로 열어 코딩하는 것이다. (vscode가 어디서든 실행되는 세상인데 적극 활용해보자)

  • 그림에서 보듯이 Local Machine에서 VS Code 를 이용하여 작업하지만, 그 작업 대상은 Remote Machine으로 해당 Machine에 접속해 VS Code Server를 설치하고 해당 Machine에서 동작할 필요한 Extension 설치 후 마치 Local Machine에서 하듯이 코드 개발, 실행, 테스트 등을 수행할 수 있다는 원리이다.
  • 나는 이 개발환경 셋팅을 위해서
  1. 우선 vscode에 remote-ssh확장팩을 설치하고
  2. ssh연결할 호스트를 입력한 이후에

  1. 새창에서 remote연결하고

  1. ssh 호스트 계정 비밀번호를 입력하면 된다.

  • 경험상 호스트 서버컴퓨터가 하루에 한번씩 재부팅되는건지 이 확장이 원래 그런건지
  • 하루에 한번씩 호스트 계정 비밀번호를 입력해 주었다.
  1. 탐색할 호스트 디렉토리 열기

추가로 원격서버의 파일을 다운 받을 수도 있다.

  • ftp / sftp 연결을 한건 아니지만, 제한적으로 서버에 있는 파일을 내 로컬에 저장할 수 도 있다.
  • 원하는 파일에서 우클릭 -> 다운로드로 받을 수 있다.

  • 추가로 aws 인스턴스에서도 같은 방법으로 진행할 수 있으니 상당히 편리한 원격조종 방식이라 생각이 든다.
  • 나는 이 remote-ssh를 이용해서 원격으로 호스트 컴퓨터의 파일을 수정하여 관리자페이지를 테스트할 수 있었다.

그럼 핵심인 ssh가 뭔데?

  • SSH란 Secure Shell Protocol, 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜(통신규약, 약속)입니다.
  • 대표적인 사용의 예는 다음과 같습니다.
  1. 데이터 전송
    • 데이터 전송에는 대표적으로 아주 잘 사용하고 있는 깃허브가 있습니다.
    • 소스 코드를 원격 저장소인 깃헙에 푸쉬할 때 여러분은 SSH를 활용해 파일을 전송하게 됩니다.
  2. 원격 제어
    • 웹 개발 공부를 하시는 분이시라면 AWS와 같은 클라우드 서비스를 이용해보셨을 것입니다.
    • 우리는 AWS의 인스턴스 서버에 접속하여 해당 머신에 명령을 내리기 위해서도 SSH를 통한 접속을 해야 합니다.
  • 그렇다면 FTP나 Telnet과 같은 다른 컴퓨터와 통신을 위해 사용되는 프로토콜도 있는데 SSH를 사용하는가를 생각해볼 수 있습니다.
  • 그 이유는 물론 "보안"입니다. 만일 예로 언급한 두 프로토콜을 통해 민감한 정보(예를 들어 로그인 정보)를 주고받는다면 정보를 직접 네트워크를 통해 넘기기 때문에 누구나 해당 정보를 열어볼 수 있어 보안에 상당히 취약합니다.

ssh의 사용이유와 통신방법

  • 사용이유 :
    • 보안때문에 FTP나 Telnet과 같은 다른 컴퓨터 통신을 사용하지 않는다.
    • SSH는 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보다 보안적인 면에서 뛰어나다.
  • 어떤 방식으로 서로 다른 컴퓨터가 안전하게 통신하게 하는가?
    ◦ Public Key and Private Key :
    ▪ SSH는 다른 컴퓨터와 통신할 때 일반적으로 사용하는 비밀번호 입력을 통한 접속을 하지 않는다.
    ▪ 기본적으로 SSH는 한 쌍의 Key를 통해 접속하려는 컴퓨터와 인증 과정을 거친다.
    ▪ 이 한 쌍의 Key는 다음과 같다.
    ◦ Public Key :
    ▪ 단어 뜻 그대로 공개되어도 비교적 안전한 Key.
    ▪ 이 키를 통해 메세지를 전송하기 전 암호화를 한다.
    ▪ 암호화는 가능하지만 복호화는 불가능하다.
    ◦ Private Key :
    ▪ 절대로 외부에 노출되어서는 안되는 Key.
    ▪ 본인의 컴퓨터 내부에 저장하게 되어있다.
    ▪ 암호화된 메세지를 복호화 할 수 있다.
  • 이 한 쌍의 키는 서로 매우 복잡한 수학적인 관계를 맺고 있다.
  • 이러한 키를 통해 서로다른 컴퓨터와 통신을 하기 위해서는 먼서 Public Key를 통신하고 있는 컴퓨터에 복사하여 저장한다.
  • 그리고 요청을 보내는 클라이언트 사이트 컴퓨터에 접속 요청을 할때 응답을 하는 서버 사이트 컴퓨터에 복사되어 정장된 Public Key와 클라이언트 사이트에 해당 Public Key와 쌍을 이루는 Private Key와 비교를 하여 서로 한 쌍의 Key인지 아닌지 검사한다.
  • 이렇게 서로 관계를 맺고 있는 Key 라는 것이 증명되면 비로소 두 컴퓨터 사이에 암호화된 채널이 형성되어 key를 활용해 메시지를 암호화하고 복호화하며 데이터를 주고 받을 수 있게된다.

참고 사이트 출처

https://robot-vision-develop-story.tistory.com/8

https://dololak.tistory.com/24

https://masssal.tistory.com/5

https://technote.kr/320#subject1

https://jstar0525.tistory.com/14

https://inpa.tistory.com/entry/VSCode-💽-Remote-SSH-사용법-AWS에-접속해서-코딩하자

https://baked-corn.tistory.com/52

https://hanamon.kr/네트워크-ssh란/