Giả lập client-server từ 2 máy tính local với giao thức ssh

Tình huống

Bạn muốn:
– Lên công ty nhưng vẫn truy cập vào máy ở nhà được 😛 (Hoặc luôn truy cập vào máy tính của người yêu được :D)
– Lấy máy mình làm server development để client có thể kết nối trực tiếp.
– Dùng máy mình tạo server để bắn Counter Strike 1.6, để có thể tàn sát những anh em khác đang ở xa 😀
– Thử nghiệm việc deploy một rails application lên server nhưng không có điều kiện thuê server.

Bài viết này, mình sẽ giới thiệu về:
– Cấu trúc client-server
IP và vài trò của private IP, public IP
PORT và vai trò của private PORT, public PORT
– Dùng máy local làm server để truy cập từ xa, từ gần 😛

Lý thuyết

Lý thuyết thì luôn khô khan, nhưng có những lý thuyết này thì công việc phía sau sẽ dễ hiểu và trơn tru hơn 🙂

Để điểm qua 1 chút lý thuyết, mời bạn đọc bài viết về các thuật ngữ cần thiết của mình.

OK, có đủ lý thuyết rồi, bây giờ bắt tay vào giải quyết các vấn đề ở đầu bài thôi 😛

Thực hành

Điều kiện cần

  • 2 máy tính nền linux (1 máy làm server, 1 máy làm client), 2 máy kết nối cùng 1 mạng (cùng cắm dây hoặc cùng wifi)
  • Máy client có sẵn 1 rails app để deploy
  • Máy server thì có cài openssh-server (với ubuntu thì cài bằng lệnh sudo apt-get install openssh-server -y)
  • Máy client thì có cài openssh-client (sudo apt-get install openssh-client -y)

Điều kiện đủ

IQ trên 1 :v (just for fun)

Giả lập server-client

Tiến hành

Từ máy client, ta sẽ kết nối tới máy server bằng giao thức ssh.

Giao thức ssh có 2 cách để kết nối: dùng mật khẩu và dùng ssh key

Kết nối bằng mật khẩu

Để kết nối được bằng mật khẩu thì tất nhiên sẽ phải cần server IP và tài khoản đăng nhập của máy server.
Giả sử máy server có các thông tin sau:
– IP: 192.168.1.23
– Tài khoản:
+ username: binh
+ password: matkhau2323
Ta tiến hành truy cập vào server với lệnh sau:

Sẽ có thông báo yêu cầu bạn nhập mật khẩu, bạn nhập vào là xong.

Đến đây, bạn đã truy cập được vào máy server, thử tạo 1 file, sau đó sang máy server kiểm tra để tận hưởng thành quả 😛

Việc mỗi lần kết nối lại phải nhập mật khẩu, rất mất công và bất tiện, nên ta sẽ dùng ssh key để thuận tiện hơn.

Kết nối bằng ssh key

Trên máy server, bạn vào thư mục ~/.ssh, tạo file authorized_keys và dán vào đó nội dung ssh public key của bạn là được.
Để lấy ssh public key của máy client, trên máy client:

id_rsa.pub là key của mình, bạn dùng key tương ứng của bạn 🙂

ssh sang máy server và chạy lệnh:

Dán ssh public key của bạn vào và lưu lại.

Bây giờ bạn thoát kết nối (lệnh exit) và ssh lại vào serve, tada, vào luôn, không lằng nhằng mật khẩu nữa 😛

Lên công ty nhưng truy cập vào máy ở nhà

Mô hình chung cho thao tác này là truy cập 1 máy tính từ xa (khác mạng).

Việc kết nối này cũng tương tự như truy cập giữa 2 máy cùng mạng, tuy nhiên, để truy cập được máy khác mạng thì mình cần phải có public IP của mạng cần truy cập, và mạng đó phải mở cổng cho mình, đồng thời nó phải NAT tới đúng máy mà mình muồn.

Nhắc lại về mô hình mạng nhà mình:
Untitled Diagram (2)

Với mô hình giả thiết trên, mình sẽ truy cập vào máy bên phải (private IP: 192.168.1.23)
OK, xem qua các thông số cần thiết:
– public IP: 205.711.802.23
– private IP: 192.168.1.23
– public PORT: 9999
– private PORT: 22 (đây là PORT mặc định của ssh)

Chuẩn bị

Việc đầu tiên cần làm là NAT cổng 9999 của server đến địa chỉ 192.168.1.23, PORT 22.

Với mỗi modem sẽ có giao diện điều khiển khác nhau, nhưng chung quy lại cũng là vào network setting, NAT setting và tạo NAT thôi.
Bạn Google thêm để biết cách NAT cho modem nhà mình.

Tiếp đến là cài các thứ cần thiết như mục trước thôi (openssh-server…)

Tiến hành

Việc kết nối cũng tương tự như trên kia:

Nó sẽ yêu cầu nhập mật khẩu, OK, đến đây thì quen thuộc rồi đúng không 😀

Vậy là từ nay có thể truy cập máy tính ở nhà mình từ bất kỳ đâu, miễn là máy ở nhà bật 😛

Thêm chút nữa

Tương tự public IP, private IP cũng là IP động, tức là mỗi lần bạn ngắt kết nối với modem (tắt máy chẳng hạn) thì private IP của bạn sẽ thay đổi. Mà nó thay đổi thì bạn phải vào modem chỉnh NAT lại cho đúng với IP mới, bất tiện quá đúng không?

May sao, private IP thì mình có thể set tĩnh được mà không mất tiền 😛

Với mỗi hệ điều hành sẽ có cách setting khác nhau, bạn tự Google để biết cách làm cho hệ điều hành mình nhé 😛

Bạn hoàn toàn có thể đổi PORT 22 mặc định của giao thức ssh, Google để biết thêm thông tin chi tiết 😛

Tạo server bắn CS1.6

Hoàn toàn tương tự như bước trên, chỉ có 1 điều khác là CS1.6 nó chạy ở cổng khác, cái này bạn có thể thiết lập được khi bật server 😀 (mặc định là 27015 thì phải :P)

Deploy rails app

Cũng hoàn toàn tương tự luôn, deploy thì mình dùng giao thức ssh (cổng 22).

Sau khi deploy, muốn truy cập rails app thì bạn để ý là mặc định rails nó chạy ở cổng 3000.

Lập trình và hơn thế nữa

Spread the love
  • 2
  •  
  •  
  •  
  •  
    2
    Shares

Leave a Reply

Be the First to Comment!

avatar
  Subscribe  
Notify of