Thứ tư, 04/03/2020 | 00:00 GMT+7

Cách sử dụng nsh để chạy các lệnh từ xa an toàn trên Ubuntu 18.04

Thường có thể khó quản lý nhiều máy hàng ngày. Mặc dù Secure Shell (SSH) là một lựa chọn tốt để truy cập từ xa, bản thân giao thức này cũng có một số hạn chế về cả sự tiện lợi và bảo mật.

Ví dụ, các máy từ xa cần phải có địa chỉ IP công cộng và một cổng chuyển tiếp để truy cập chúng, điều này sẽ hiển thị chúng với internet hoặc ít nhất là một mạng lớn hơn. Điều này đặc biệt đáng quan tâm nếu bạn sử dụng password để xác thực thay vì cặp khóa public key và private key . Hơn nữa, nếu bạn không biết trước public key của máy từ xa, bạn có thể dễ bị tấn công " man-in-the-middle ". Và nhiều máy từ xa bạn muốn truy cập không có địa chỉ IP công cộng hoặc chúng có địa chỉ IP động mà bạn có thể không biết.

Ngoài ra, SSH yêu cầu một kết nối cho mỗi phiên từ xa. Nếu user cần chạy một lệnh duy nhất trên hàng trăm hoặc thậm chí hàng nghìn máy, trước tiên họ phải cài đặt kết nối đến từng máy bằng cách bắt tay TCP, điều này kém hiệu quả hơn.

NKN Shell , hay nsh, là một giải pháp thay thế cho SSH cung cấp một cách thuận tiện và an toàn để chạy các lệnh từ xa. nsh tận dụng mạng công cộng global của NKN, mạng này cung cấp truyền dữ liệu an toàn và phi tập trung. Kiến trúc sử dụng các địa chỉ duy nhất chứa public key được sử dụng cho cả mã hóa định tuyến và terminal mà không có bất kỳ cơ sở hạ tầng public key nào (PKI). Mạng cũng không yêu cầu server từ xa phải có địa chỉ IP công cộng. Server từ xa chỉ cần có quyền truy cập Internet và có thể cài đặt các kết nối HTTP và websocket gửi đi. Do đó, các máy từ xa của bạn không được tiếp xúc với Internet mở.

Trong hướng dẫn này, bạn sẽ sử dụng NKN shell daemon và các ứng dụng NKN Shell Client Xterm để thực thi các lệnh trên một máy từ xa. Để làm như vậy, bạn sẽ cài đặt và cấu hình daemon NKN Shell trên một máy từ xa có truy cập internet, tạo một cặp khóa và tạo kết nối của bạn từ một client .

Yêu cầu

Để làm theo hướng dẫn này, bạn cần những thứ sau:

Bước 1 - Cài đặt NKN Shell Daemon trên Server Từ xa

Đầu tiên, cài đặt NKN shell daemon ( nsd ) trên server của bạn. Ứng dụng này sẽ gọi nkn-multiclient , sẽ kết nối với mạng công cộng của NKN và lấy một địa chỉ để định tuyến. Sau đó, daemon sẽ lắng nghe các lệnh shell đến từ các client đã xác thực và nằm trong danh sách trắng, thực hiện các lệnh đó, rồi gửi lại kết quả.

Bắt đầu bằng cách download bản nhị phân nshd mới nhất được tạo sẵn từ GitHub :

  • wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz

Extract file :

  • tar -zxvf linux-amd64.tar.gz

Sau đó, di chuyển các file vào folder /usr/local/bin để chúng có sẵn trên toàn hệ thống:

  • sudo mv ./linux-amd64/* /usr/local/bin/

Tiếp theo, bạn sẽ cấu hình quá trình này chạy như một quy trình daemon bằng Systemd để nó sẽ khởi động lại nếu server được đặt lại.

Tạo một file có tên nshd.service trong /etc/systemd/system :

  • sudo nano /etc/systemd/system/nshd.service

Thêm định nghĩa dịch vụ sau vào file để cấu hình dịch vụ:

/etc/systemd/system/nshd.service
[Unit] Description=NKN Shell Daemon After=network.target  [Service] Type=simple User=root Group=root Restart=always ExecStart=/usr/local/bin/nshd  [Install] WantedBy=multi-user.target 

Tìm hiểu thêm về file đơn vị Systemd trong Tìm hiểu đơn vị Systemd và file đơn vị .

Lưu file và thoát khỏi editor . Sau đó, bật và khởi động dịch vụ nshd bằng các lệnh sau:

  • sudo systemctl enable nshd.service
  • sudo systemctl start nshd.service

Chạy lệnh sau đảm bảo dịch vụ đang hoạt động và bắt đầu:

  • sudo systemctl status nshd.service

Bạn sẽ thấy rằng trạng thái đang hoạt động:

Output
● nshd.service - NKN Shell Daemon Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago Main PID: 3457 (nshd) Tasks: 10 (limit: 1152) CGroup: /system.slice/nshd.service └─3457 /usr/local/bin/nshd Feb 19 19:16:02 your_hostname systemd[1]: Started NKN Shell Daemon. Feb 19 19:16:03 your_hostname nshd[3457]: Create directory /etc/nshd/ Feb 19 19:16:03 your_hostname nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd Feb 19 19:16:03 your_hostname nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json Feb 19 19:16:03 your_hostname nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys Feb 19 19:16:03 your_hostname nshd[3457]: Listening at d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba

Để kết nối với server của bạn, bạn cần lấy địa chỉ NKN của nó, bạn có thể tìm thấy địa chỉ này trong kết quả của lệnh trước đó. Bạn cũng có thể chạy lệnh sau để lấy địa chỉ:

  • nshd addr

Bạn sẽ thấy địa chỉ của bạn xuất hiện:

Output
e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

Hãy ghi lại địa chỉ này vì bạn cần nó để kết nối với server của bạn .

Bây giờ daemon đang chạy và lắng nghe, bạn có thể cấu hình client dựa trên web để nói chuyện với server .

Bước 2 - Cấu hình quyền cho NKN Shell Client

Bạn cần một ứng dụng client tương thích có thể kết nối với máy từ xa. Trong hướng dẫn này, bạn sẽ sử dụng NKN Shell Client Xterm, một client shell NKN dựa trên web. Có một số cách khác nhau để chạy nó:

Trong hướng dẫn này, bạn sẽ sử dụng version được lưu trữ. Trên máy local của bạn, hãy mở trình duyệt web và chuyển đến https://nsh.nkn.org . Bạn sẽ thấy màn hình chào mừng:

Khách hàng Shell

Nhấp vào Tạo cặp khóa mới . Các khóa của bạn sẽ được tạo và hiển thị như trong hình sau:

Cặp khóa được tạo

Lưu ý : Khi bạn tạo một cặp khóa mới, bạn sẽ thấy Hạt giống bí mật . Giữ hạt giống bí mật này an toàn và bảo mật, giống như bạn làm với private key SSH của bạn . Bất kỳ ai có hạt giống bí mật này đều có thể sử dụng nó để tạo lại public key của bạn và sau đó chạy lệnh trên các máy từ xa của bạn. Trình duyệt của bạn sẽ ghi nhớ hạt giống này, nhưng bạn nên sao chép nó ở một nơi an toàn để có thể sử dụng lại trên máy mới.

Lưu Hạt giống Bí mật ở một nơi an toàn. Bạn có thể sử dụng nó sau này để tạo lại public key của bạn để bạn có thể kết nối từ một client khác.

Vì đây là một cặp khóa mới, bạn phải thêm Khóa công khai vào file /etc/nshd/authorized_pubkeys trên server của bạn .

/etc/nshd/authorized_pubkeys có role tương tự như file ~/authorized_keys /etc/nshd/authorized_pubkeys kiểm soát public key SSH nào có thể đăng nhập. Tệp authorized_pubkeys /etc/nshd/authorized_pubkeys có thể chỉ định user nào được liên kết với khóa. Vì mục đích bảo mật, bạn cần đăng nhập bằng user không phải root trong hướng dẫn này, vì vậy bạn sẽ liên kết public key được tạo với user sammy mà bạn đã tạo trong hướng dẫn Cài đặt Server Ban đầu trong yêu cầu của bài viết này.

Để liên kết user với public key , bạn cần lấy id user (UID) và id group (GID) của user này. Thực thi lệnh sau trên server của bạn khi đăng nhập với quyền user sammy :

  • id

Bạn sẽ thấy UID và GID của user :

Output
uid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)

Bây giờ hãy mở file authorized_pubkeys quyền_pubkeys trong editor :

  • sudo nano /etc/nshd/authorized_pubkeys

Thêm một dòng duy nhất chứa public key , uid và gid, được phân tách bằng dấu cách:

ủy quyền_pubkeys
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000 

Lưu các file .

Xác minh file chứa nội dung chính xác:

  • cat /etc/nshd/authorized_pubkeys

Bạn sẽ thấy key của bạn được in trên màn hình:

Output
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

Sau đó khởi động lại daemon nshd để áp dụng các thay đổi:

  • sudo systemctl restart nshd.service

Bây giờ hãy kiểm tra nó bằng cách kết nối với server và chạy một lệnh.

Bước 3 - Gửi Lệnh tới máy từ xa và nhận phản hồi

Trong NKN Shell Client, nhập địa chỉ nshd từ xa của bạn từ Bước 1, cũng như mã định danh ứng dụng client tùy chọn:

Trang web nsh với địa chỉ từ xa được điền vào

Nhấp vào Kết nối để bắt đầu kết nối.

Bạn sẽ được kết nối với máy từ xa của bạn và hiển thị dấu nhắc terminal trong trình duyệt. Từ đây bạn có thể sử dụng nó giống như SSH. Ví dụ: thực hiện lệnh sau để chuyển sang folder /etc/nshd :

  • cd /etc/nshd

Sau đó liệt kê nội dung của nó:

  • ls

Bạn sẽ thấy nội dung của folder :

Output
authorized_pubkeys wallet.json wallet.pswd

Bạn có thể ngắt kết nối bằng lệnh exit . Khi bạn cần kết nối lại, hãy truy cập lại giao diện web và nhập chi tiết kết nối của bạn. Nếu bạn tạo một cặp khóa mới, bạn cần thêm public key mới vào server của bạn .

Kết luận

Trong hướng dẫn này, bạn đã cài đặt và cấu hình nsh để gửi lệnh đến máy từ xa một cách an toàn và thuận tiện. nsh là một cách tốt để truy cập các máy từ xa của bạn khi bạn cần chạy nhanh một lệnh để nhận trạng thái mới nhất của dịch vụ hoặc xem một số cài đặt cấu hình. Ứng dụng này dựa trên mạng công cộng global của NKN và nó được sử dụng miễn phí nên bạn có thể kết hợp nó vào ứng dụng hoặc quy trình làm việc của riêng mình ngay hôm nay.

Bạn cũng có thể khám phá nkn-tunnel hỗ trợ SSH hoặc bất kỳ ứng dụng dựa trên TCP nào khác.


Tags:

Các tin liên quan

Cách đóng gói và xuất bản ứng dụng Snap trên Ubuntu 18.04
2020-02-25
Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên Ubuntu 18.04 [Khởi động nhanh]
2020-02-10
Cách sử dụng Cron để tự động hóa công việc trên Ubuntu 18.04
2020-01-31
Cách cài đặt và sử dụng Radamsa để Fuzz kiểm tra các chương trình và dịch vụ mạng trên Ubuntu 18.04
2020-01-30
Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 18.04
2020-01-21
Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên Ubuntu 18.04
2020-01-06
Cách sử dụng Ansible để cài đặt và thiết lập WordPress với LAMP trên Ubuntu 18.04
2019-12-31
Cách cài đặt WordPress với OpenLiteSpeed trên Ubuntu 18.04
2019-12-18
Cách sử dụng Ansible để cài đặt và thiết lập LAMP trên Ubuntu 18.04
2019-12-17
Cách sử dụng Ansible để cài đặt và thiết lập LEMP trên Ubuntu 18.04
2019-12-05