Search

Mosh - 향상된 SSH (아이패드 코딩)

PublishDate
2021/06/29
Category
Util
Automation
Tag & Keyword
Mosh
SSH

What is Mosh ?

Mobile Shell의 약자로 Ipad와 같은 모바일 환경에서 원격 터미널을 더 원활하게 제공하는 프로토콜이다.
원격 터미널 프로토콜인 SSH의 진화형으로 더 열악한 환경에서도 원격 터미널 사용이 가능하다.
Mosh는 UDP 기반 전송 시스템으로 패킷 손실을 훨씬 더 효율적으로 처리하여 SSH보다 안정적인 세션을 제공한다. 또한 TCP보다 빠른 UDP의 지연시간으로 터미널 반응속도가 조금 더 빠릿하다.
입/출력을 따로 연결하기 때문에 Ctrl+c 같은 키에 빠르게 반응한다. ( 나는 SSH 명령어 잘못입력하고 Ctrl+c 연타해본 경험이 아주 많다)
인터넷이 끊겼다가 연결되면 세션이 종료되는 SSH와 달리 Mosh는 다시 연결하고 입력하는 동안 명령을 보존한다.
EC2에 각종 리눅스로 Mosh를 구성하는 방법을 확인하고 접속해본다.

Mosh를 사용하기 위한 사전 요건

이 실습에 모든 Linux는 AWS EC2로 생성하였습니다. 또한 실제 Linux 화면 사진은 Amazon Linux 2 OS입니다. 실습에서는 모두 Root로 Login하지만 실제 서버에서 Root 계정의 직접 로그인은 권장하지 않습니다.

포트

Mosh는 앞서 설명헀듯이 UDP를 사용한다. SSH접속 후 Mosh 설치 및 접속을 위한 Inbound Rule은 다음과 같다.
TCP/22
UDP/60000-61000 (60000-60010과 같이 조금 오픈해도 되며, 기본적으로 mosh로 접속할 때 세션하나당 포트 하나를 60000부터 오름차순으로 할당받는다.)

Root PW 설정 및 Root Login 설정

Mosh를 통해 Key방식으로도 로그인이 가능하지만 이번 실습에서는 PW로그인을 할 것이다.
passwd 명령어로 Root PW 설정 (EC2는 생성시 Root PW 없음)
/etc/ssh/sshd_config 파일에서 루트로그인 & PW인증 방식을 허용해주어야 한다.
1.
PasswordAuthentication yes로 변경
2.
PermitRootLogin yes로 변경

Mosh 설치 방법

Mosh on Centos7
#So Simple yum install -y epel-release yum install -y mosh
Shell
복사
Mosh on Ubuntu 20.04
#So Simple apt-get update apt-get install -y mosh
Shell
복사
Mosh on Amazon Linux 2
Amazon Linux에 Mosh를 설치하는 것은 까다롭다. 아마존 리눅스 Mosh 설치가 불가능했고 한글포스팅이 작성일 기준으로 전무해서 이 포스팅을 적은것이기도 하다.
현재 Mosh는 Amazon Linux를 위한 버전이 없다. 그래서 같은 뼈대를 가진 RHEL7(Centos7)의 패키지를 가져와 설치해도 작동하지 않는다.
Amazon Linux 2에서 Mosh를 설치하려면 amazon-linux-extras의 epel을 통해서 RHEL을 위해 빌드된 Mosh를 다운받은 후 AL2에 알맞게 Rebuild 해야한다.
패키지 리빌드 과정을 포함한 설치 스크립트는 아래와 같다.
#/bin/bash sudo su - ## Install and Enable the EPEL Repository for yum amazon-linux-extras install -y epel ## Install packages generally required for building RPM packages yum install -y yum-utils rpm-build redhat-rpm-config make ## Install build dependencies for mosh yum-builddep -y mosh ## Download the source RPM for mosh yumdownloader --source mosh-1.3.2-1.el7 ## Rebuild the RPM package locally rpmbuild --rebuild mosh-1.3.2-1.el7.src.rpm ## Install Mosh For Amazon Linux 2 yum -y install ~/rpmbuild/RPMS/x86_64/mosh-1.3.2-1.amzn2.x86_64.rpm
Shell
복사

Userdata를 사용하여 Mosh 환경 자동셋팅

EC2(Amazon Linux) 생성시에 Userdata에 아래 bash-script를 복사해서 생성하면 포트오픈이 정상적으로 되어있다는 가정하에 바로 Mosh 접근이 가능하다.
EC2 생성시 PublicIP or NAT등에 연결되어 인터넷에 바로 접근이 가능해야 Userdata로 사용할 수 있다. PublicIP 없이 생성 후 EIP를 붙이는 등의 환경에서는 해당 스크립트의 첫줄을 빼고 복사해서 터미널에서 붙여넣기
#!/bin/bash #change hostname hostnamectl set-hostname mosh-test echo 'root:passW0rd!' | chpasswd echo "preserve_hostname: true" >> /etc/cloud/cloud.cfg yum -y update yum -y install wget #SSH sed -i 's\#PermitRootLogin yes\PermitRootLogin yes\g' /etc/ssh/sshd_config sed -i 's\PasswordAuthentication no\PasswordAuthentication yes\g' /etc/ssh/sshd_config systemctl restart sshd ##mosh amazon-linux-extras install -y epel yum install -y yum-utils rpm-build redhat-rpm-config make yum-builddep -y mosh yumdownloader --source mosh-1.3.2-1.el7 rpmbuild --rebuild mosh-1.3.2-1.el7.src.rpm mv /rpmbuild /root/rpmbuild yum -y install ~/rpmbuild/RPMS/x86_64/mosh-1.3.2-1.amzn2.x86_64.rpm reboot rm -rf /root/rpm*
Shell
복사

EC2 생성해서 Mosh 접속해보기

1.
사진 하단에 사용자 데이터(Userdata)를 텍스트로 넣어서 인스턴스를 생성했다.
2.
Security Group도 최소한의 포트만 오픈해서 테스트 (Key없이도 Root Login이 가능!)
3.
Userdata 셋팅에 시간이 걸리므로 2~3분정도 대기했다가 접속을 시도해보자 (EC2 → 작업 → 모니터링 → 인스턴스 스크린샷 가져오기 에서 Hostname이 변경된것을 확인 하고 접속시도를 하는 것도 좋은 방법이다.)
매번 MobaXterm을 사용했었는데 오늘은 Mosh 호스팅이라 강력한 Ipad 터미널 어플 Terminus를 사용했다.
4.
Mosh 접속 성공!
Public IP는 AWS의 임시 IP로 지금은 폐기했습니다.