ติดตั้ง tmate server
Tags: tmate, tmateserver
Published: 2021-01-16 05:48:29

หลังจากที่ได้ลองเล่น tmate มาสักพักใหญ่ รู้สึกประทับใจในความเร็ว และความสะดวกมากมาย (แม้ยังติดปัญหาเล็กน้อยในการใช้ ssh บน Windows)

วันนี้มีคนใจดีบริจาค VPS มาให้ลองเล่น tmate server เลยจัดไปสักหน่อย เดี๋ยวเสียน้ำใจ 555+ มาลุยกันเลย


# ติดตั้ง tmate server

เริ่มต้นจากสร้าง Private Key สำหรับ tmate server ก่อน 
```
curl -fsSL https://raw.githubusercontent.com/tmate-io/tmate-ssh-server/master/create_keys.sh | bash
```
![Screenshot 2021-01-16 121827](https://dev-to-uploads.s3.amazonaws.com/i/ws5bluq4prlvuq33af1i.png)

จดสองบรรทัดสุดท้ายไว้ เพราะเราต้องไป Set ให้เครื่องที่ต้องการต่อ tmate
 
จากนั้นลง docker engine (ในเครื่องใครมีแล้วก็ข้ามได้) 
```
curl -fsSL https://get.docker.com | bash
```

สุดท้ายก็สั่งรัน tmate-server image 
```
docker run -itd --name tmate -v $PWD/keys:/keys --cap-add SYS_ADMIN -e SSH_KEYS_PATH=/keys -e SSH_HOSTNAME=<hostname> -p 2200:2200  tmate/tmate-ssh-server
```
โดยที่ `<hostname>` คือ domain ที่จะใช้ในการ connect tmate


# ตั้งค่าเครื่องที่ต้องการใช้ tmate

ติดตั้ง tmate ที่เครื่อง [ตามบทความก่อนหน้า](https://dev.to/kapong/ssh-session-1md0) แล้วตั้งค่าไฟล์ `~/.tmate.conf` ดังนี้
```
set -g tmate-server-host "<hostname>"
set -g tmate-server-port 2200
set -g tmate-server-rsa-fingerprint SHA256:tU84BnNHSoqk6o+fB96xPu7Hoikr3GNrz8+o9bIAp3M
set -g tmate-server-ed25519-fingerprint SHA256:2gohOJWkDjf+6t8OAbEW/fk8z1w2UbXFHa3mjoxEmWA
```
สองบรรทัดสุดท้ายคือที่ได้จากขั้นตอนการสร้าง Private Key ข้างบน จากนั้นรันคำสั่ง `tmate` ตามปกติ

![Screenshot 2021-01-16 124718](https://dev-to-uploads.s3.amazonaws.com/i/o3spbslmgqbslveo9ay9.png) 

หยุดตรงนี้ก็ได้ แต่ใครจะไปต่อก็จัดไป


# สร้าง Easy Install Script (Docker Image)

เพื่อให้ไปตั้งค่าในเครื่องใหม่ง่ายขึ้น หรือจะส่งให้ปลายทางติดตั้งได้ง่าย ก็ควรจะต้องทำ script อัตโนมัติให้ ขั้นตอนจะได้ไม่เยอะ สามารถทำได้โดย

สร้าง Docker โดยมีไฟล์ต่างๆ ดังนี้
![Screenshot 2021-01-16 123113](https://dev-to-uploads.s3.amazonaws.com/i/5h3mgcpn7s3dyb4bim7z.png)
 
Dockerfile
```
FROM nginx:alpine

ADD nginx.conf /etc/nginx/
ADD *.sh /usr/share/nginx/html/
```

nginx.conf
```
worker_processes 2;

events { worker_connections 1024; }

http {
    include    mime.types;
    sendfile on;
    server {
        root /usr/share/nginx/html/;
        index install.sh;
        server_name t.ondev.link;
        listen 80;
    }
}
```

install.sh
```
#!/bin/bash
set -e

# t.ondev.link tmate installation script
# This script is meant for quick & easy install via:
#   $ curl -fsSL http://<hostname> | bash

arch=$(dpkg --print-architecture)

curl -fL https://github.com/tmate-io/tmate/releases/download/2.4.0/tmate-2.4.0-static-linux-${arch}.tar.xz -o /tmp/tmate.tar.xz

tar -xvf /tmp/tmate.tar.xz > /dev/null
mv tmate-*/tmate /usr/local/bin/
chmod +x /usr/local/bin/

rm -rf tmate-* /tmp/tmate.tar.xz

echo "set -g tmate-server-host \"<hostname>\"" > ~/.tmate.conf
echo "set -g tmate-server-port 2200" >> ~/.tmate.conf
echo "set -g tmate-server-rsa-fingerprint SHA256:tU84BnNHSoqk6o+fB96xPu7Hoikr3GNrz8+o9bIAp3M" >> ~/.tmate.conf
echo "set -g tmate-server-ed25519-fingerprint SHA256:2gohOJWkDjf+6t8OAbEW/fk8z1w2UbXFHa3mjoxEmWA" >> ~/.tmate.conf

echo "Done"
```
** อย่าลืมแก้ค่า `<hostname>` และ SHA256 ทั้งสองบรรทัดสุดท้าย **

เมื่อพร้อมแล้วก็สร้าง docker image และรันได้เลย 
```
docker build -t tmate-setup .
docker run -itd -p 80:80 --name tmate-setup tmate-setup
```

เมื่อเรียบร้อย ก็แจ้งให้ปลายทางรันคำสั่ง
```
curl -fsSL http://<hostname> | bash
```
คำสั่งนี้จะติดตั้งและตั้งค่าทั้งหมดให้ ปลายทางก็สามารถรัน `tmate` ต่อได้เลยครับ ezez