Sử dụng ngrok để kết nối SSH máy tính ở nhà

Giới thiệu

Mai là ngày đầu tiên mình lên phòng lab NLP-KD. Đúng ra mình đã lên phòng lab sớm hơn, nhưng năm nay mình ăn tết hơi lâu đến tận tháng 4. Trong khoảng thời gian ăn tết đó, thì hầu hết mình code trên máy Mac Mini (mình sẽ gọi là máy 1). Mình còn có một chiếc Macbook nữa (mình sẽ gọi là máy 2), và đó là chiếc máy mình sẽ mang lên phòng lab, vì chiếc máy 1 khá là cồng kềnh nên không thể mang lên trường được. Nhưng vấn đề xảy ra ở đây là toàn bộ mã nguồn, mô hình, … mình đều lưu ở máy 1, còn chiếc máy 2 thì bộ nhớ hơi hạn chế, cấu hình cũng không bằng máy 1. Vì vậy mình quyết định sẽ kết nối SSH máy 1 từ chiếc máy 2, như vậy mình có thể code trên máy 1 mình để ở nhà và vẫn đảm bảo hiệu quả làm việc như ở nhà.

Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng ngrok để tạo tunnel đưa máy 1 public lên internet, để có thể kết nối SSH từ một máy bất kì. Việc sử dụng ngrok rất đơn giản, mà không cần phải cấu hình forward port trên router.

Chuẩn bị

Cài đặt ngrok: https://ngrok.com

Tạo tài khoản ngrok (nếu chưa có): https://dashboard.ngrok.com/signup

Cấu hình trên máy 1

Sau khi đăng nhập trên website và có authtoken, kết nối với ngrok trên máy 1 hay máy cần điều khiển:

Hướng dẫn từ chính ngrok, có thể tham khảo ở đây: https://dashboard.ngrok.com/get-started/setup

ngrok config add-authtoken {authtoken}

Sau đó tạo tunnel, mở trên port 22 (đây là port của SSH) trên giao thức TCP:

ngrok tcp 22

Kết quả sẽ như sau:

image1

Như vậy là chiếc máy tính 1 đã được forward từ local lên domain 0.tcp.ap.ngrok.io của ngrok trên port 18808.

Kết nối từ máy 2

Việc còn lại là kết nối SSH máy 1 từ máy 2, sau khi đã có domain và port được tạo từ máy 1. Hãy thay thế username, domain (hoặc IP) và port tương ứng.

ssh hieunguyen@0.tcp.ap.ngrok.io -p18808

Vậy là ta đã kết nối SSH tới máy 1 thành công.

image2

Sử dụng trên VSCode

Hướng dẫn từ VSCode: https://code.visualstudio.com/docs/remote/ssh

Nếu đã kết nối SSH máy 1 từ máy 2 thành công, thì việc cấu hình trên VSCode cũng sẽ rất đơn giản. Cấu hình như sau:

# ~/.ssh/config

Host MacMini
    HostName 0.tcp.ap.ngrok.io
    User hieunguyen
    Port 18808

Việc còn lại là dùng VSCode để remote, như vậy việc trải nghiệm code trên máy 2 hoàn toàn giống như trên máy 1.

image3

Tổng kết

Như vậy là mình đã hướng dẫn xong mọi người cách có thể điều khiển SSH máy tính ở nhà, từ một máy tính bất kì, có thể là máy tính trên thư viện trường, máy tính trên công ty, máy tính của người yêu 😝 mà không phải lo vấn đề copy qua lại mã nguồn, dữ liệu.

Ưu điểm của cách này là có thể tạo một địa chỉ public để có thể kết nối SSH dễ dàng mà không cần phải cấu hình phức tạp trên router.

Tuy nhiên vẫn có một số nhược điểm là máy tính ở nhà phải luôn bật, hoặc ở chế độ Wake on LAN. Nếu nhà mất điện, hay mất kết nối internet thì sẽ không kết nối được. Phải chuẩn bị tạo tunnel ở nhà trước, sau đó thì mới kết nối được, vấn đề này thì các bạn có thể dùng crontab để tạo tunnel mỗi khi máy bật để đỡ mất công.

Nếu thấy bài viết có ích, hãy share cho mọi người hoặc note lại khi cần nhé.

@hieunguyen1053

Discussion and feedback