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로 지금은 폐기했습니다.