Server

Giao thức Secure Shell (SSH)

SSH là một giao thức mạng được mã hóa bảo mật, nó tạo ra kết nối bảo mật trên một mạng lưới không bảo mật. SSH cũng được hiểu như ứng dụng dùng để kết nối đăng nhập vào một hệ thống máy tinh bởi người dùng.

Giao thức SSH được dùng ở rất nhiều nền tảng từ Linux, macOs, Windows với các mục đích như:

  • Đăng nhập vào shell của máy tính từ xa (máy chủ)
  • Thi hành lệnh trên máy kết nối
  • Thiết lập tự động đăng nhập vào server
  • Truyền file an toàn
  • Gắn một thư mục ở máy từ xa (máy chủ) vào máy client

Cài đặt SSH Server

Cài OpenSSH Server, SSH Client trong Linux

Một máy Server muốn máy khác kết nối đến nó qua giao thức SSH thì nó phải có dịch vụ SSH (SSH Server) chạy trên hệ thống đó. Đối với các Server Linux như CentOs ... thì SSH Server, SSH Client thường cài đặt sẵn

Nếu chưa cài thì có thể thực hiện như sau:

Với CentOS

yum -y install openssh-server openssh-clients

Với Ubuntu

sudo apt install openssh-client
sudo apt install openssh-server

Cấu hình OpenSSH Server trong Linux

Khi OpenSSH Server cài đặt xong, có thể chỉnh sửa cấu hình của nó trong file: /etc/ssh/sshd_config, ví dụ dùng Vim để chỉnh sửa:

vi /etc/ssh/sshd_config

Một số tham số bạn có thể quan tâm như:

  • Đổi cổng SSH server mặc định là cổng 22, nếu muốn đổi sang cổng khác ví dụ 2222 thì chỉnh tham số
    Port 1235
  • Cho phép user kết nối qua SSH để thiết lập một user có tên ví dụ xtlab và abcuser của hệ thống được phép kết nối qua SSH thì thêm thiết lập
    AllowUsers abcuser xtlab
    Ngược lại là cấm một User nào đó đăng nhập SSH thì dùng:
    DenyUsers abcuser xtlab

Cổng của OpenSSH Server (mặc định là 22) cần đảm bảo đã được mỏ, có thể gõ netstat -lntu xem các cổng đang mở. Nếu chưa mở thì có thể dùng iptables mở cổng, ví dụ cổng xxx cần mở:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport ***** -j ACCEPT
service iptables restart

Sau khi thay đổi thiết lập cho OpenSSH Server khởi động lại OpenSSH bằng lệnh:

sudo service sshd restart

Cài đặt OpenSSH Server trong Windows Server

Muốn máy chủ Windows Server hỗ trợ kết nối đến nó bằng SSH thì cũng cần cài đặt OpenSSH Server.

1 Tải về OpenSSH Đầu tiên tải OpenSSH Server bản thích hợp với máy chủ về, như file OpenSSH-Win64.zip, giải nén nội dung file đó chứa vào thư mục ví dụ C:/OpenSSH

2 Cài đặt dịch vụ SSHD và ssh-agent: chạy cmd với quyền Administrator, rồi chuyển vào thư mục chứa SSH bằng lệnh:

cd c:\OpenSSH

Gõ lệnh cài như sau

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

2 Dịch vụ SSH, truy cập vào Control Panel > System and Security > Administrative Tools > Services, tìm đến dịch vụ có tên sshd, ssh-agent đặt cho nó sang chế độ khởi động Automatic, rồi chạy nó (Start)

Như vậy là Server Windows đã cài đặt dịch vụ cho phép truy cập đến nó qua SSH với cổng 22, bạn cũng cần dùng FireWall của Windows để mở cổng 22

Cấu hình OpenSSH Server trên Windows giống như trên Linux nhưng file cấu hình là tại C:\OpenSSH\sshd_config_default, mở file này cầu hình sau để có hiệu lực bạn cần Restart lại Service shhd

Thực hiện kết nối tới máy SSH Server

Giả sử máy Server có cho phép kết nối SSH, có địa chỉ IP hoặc tên miền là IP với user là user thì sẽ thực hiện kết nối như sau:

Kết nối từ máy trạm Linux

Từ giao diện dòng lệnh, gõ:

ssh user@IP

Khi yêu cầu nhập password của user thì nhập vào, và kết nối SSH sẽ được thiết lập. Từ đây cho phép nhập cách lệnh mà nó sẽ thi hành trên máy được kết nối đến.

Kết nối từ máy trạm Windows với Putty

Bạn có thể tải OpenSSH về và dùng với cmd tương tự như Linux. Tuy nhiên với Windows cách phổ biến hơn là dùng ứng dụng Putty. Tải về tại: Putty, cài đặt xong chạy Putty nó có giao diện như sau:

Bạn điền thông số vào gồm: điện IP (hoặc tên miền), cổng kết nối. Có thể nhập tên cấu hình ở mục Saved Sessions rồi bấm Save lại để lần sau muốn kết nối chỉ việc chọn tên cấu hình và bấm Load, tránh khỏi thiết lập thông số kết nối từ đầu.

Cấu hình xong bấm vào Open, nhập user và password để thực hiện kết nối. Kết quả là có một giao diện dòng lệnh làm việc trực tiếp với Server.

putty

Chú ý khi bạn kết nối đến Server Windows bằng Putty như trên, nếu có dòng thông báo lỗi:

Server protocol violation: unexpected SSH2_MSG_UNIMPLEMENTED

Thì cấu hình Putty như sau để bỏ lỗi: Từ cửa sổ cấu hình Putty chọn Connection > SSH > Kex, ở bên phải cửa số thấy có khu vực Althorithm selection policy, trong danh sách đó hãy bấm chọn Diffe-Hellman group exchange đang ở đầu danh sách, sau đó bấm vào nút Down để dịch nó xuống vị trí thứ 3. Thực hiện kết nối lại sẽ hết lỗi.

Cơ chế xác thực bằng SSH Key

Ngoài cơ chế xác thức bằng cách nhập mật khẩu như trên còn có cơ chế sử dụng SSH Key để xác thức. Để tạo nên xác thực này cần có hai thứ đó là Private KeyPublic key

  • Private Key khóa riêng, là một file text bên trong nó chứa mã riêng để xác thực (xác thực là kiểm tra sự phù hợp của Private Key và Public Key). Máy khách kết nối với máy chủ phải chỉ ra file này khi kết nối SSH, để thay vì nhập mật khẩu sẽ dùng mã trong file này để xác thực.
  • Public Key khóa chung, là một file text nhưng nó lại lưu ở phía Server, nó dùng để khi Client gửi Private Key lên để xác thực thì kiểm tra phù hợp giữa Private Key và Public Key này. Nếu phù hợp thì cho kết nối.

Cấu hình để OpenSSH cho phép xác thực qua SSH Key

Với Server Linux mở file cấu hình /etc/ssh/sshd_config thêm vào dòng

PubkeyAuthentication yes

Sau khi lưu lại, khởi động lại SSH Server bằng lệnh

Service shhd restart

Với Server Windows mở file cấu hình C:\OpenSSH\sshd_config_default thêm vào dòng

PubkeyAuthentication yes

Sau khi lưu lại, khởi động lại Service sshd

Tạo SSH Key

Có nhiều cách để có được SSH Key (cặp Private KeyPublic Key), dưới đây là một cách:

Tạo SSH tại Server Linux

Đăng nhập vào cmd (terminate) với user cần sinh SSH Key rồi gõ dòng lệnh:

ssh-keygen -t rsa

Khi nó hỏi nhập tên file để lưu Private Key, hãy nhấn Enter để giữ gợi ý mặc định lưu tại ~/.ssh/id_rsa. ~ là thư mục gốc của user, nhu vậy nó sẽ tự tạo ra thư mục .ssh trong thư mục gốc của user (~) và lưu Private Key trong đó. Khi nó hỏi nhập mã passphrase bạn cũng có thể bỏ qua không cần thiết phải tạo (nếu tạo sau này mỗi khi đăng nhập sẽ phải nhập mã này). Cuối cùng nhấn Enter để sinh ra tiếp Public key

Kết quả lệnh trên bạn đã có:

  • Private Key chứa trong file ~/.ssh/id_rsa, hãy lấy file này về lưu lại cẩn thận, nó được dùng để SSH client kết nối đến Server
  • Public Key chứa trong file ~/.ssh/id_rsa.pub, hãy copy nội dung bên trong file này chép nguyên vẹn vào file ~/.ssh/authorized_keys để SSH Server dùng được. Hoặc nhanh chóng là copy một bản id_rsa.pub thành file mới tên authorized_keys bằng lệnh:
    cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

    Sau khi có file authorized_keys có thể xóa id_rsa.pub

Tạo SSH Key tại Server Windows

Chạy cmd trên Server Windows, chuyển vào thư mục C:\OpenSHH là nơi cài đặt OpenShh rồi gõ lệnh:

ssh-keygen -t rsa

Hoặc

ssh-keygen -t rsa -f id_rsa

Cách phát sinh SSH Key giống hệt trên Linux, các file kết quả lưu tại %homepath%\.ssh\. Với %homepath% là thư mục gốc của User, ví dụ như bạn đang đăng nhập với User là Administrator thì %homepath%C:\Users\Administrator\

  • Private Key chứa trong file %homepath%/.ssh/id_rsa, hãy lấy file này về lưu lại cẩn thận, nó được dùng để SSH client kết nối đến Server
  • Public Key chứa trong file %homepath%/.ssh/id_rsa.pub, đổi tên file này thành %homepath%/.ssh/authorized_keys

Sử dụng SSH Key với Putty

File Private Key (id_rsa) bạn lưu vào máy trạm có thể dùng được với nhiều ứng dụng cần kết nối SSH, tuy nhiên với Putty vì có sự không tương thích giữa OpenSSH key và Putty key nên trước khi sử dụng cần chuyển đổi cho tương thích với Putty.

1 Tải về PuttyGen tại PuttyGen, sau đó chạy file tải về nó có giao diện dạng:

2 Giả sử file Private Key id_rsa bạn tải về lưu tại C:\MySSH\id_rsa, ở giao diện trên bạn bấm vào Load, chỉ đến file id_rsa. Sau đó bấm vào Save Private Key, lưu nó thành file mới ví dụ: C:\MySSH\id_rsa.ppk

3 Thực hiện kết nối Putty. Chạy Putty thiết lập IP, cổng kết nối như bình thường. Tiếp theo bấm vào mục Connection > SSH > Auth, nhìn bên phải bấm vào Browse ..., chọn đến file Private Key: C:\MySSH\id_rsa.ppk. Cuối cùng là Open để kết nối mà không dùng đến Password