SSH

GIAO THỨC SSH
SSH là dịch vụ kết nối từ xa có mã hóa, chứng thực và đáp ứng các yêu cầu bảo mật và các tính năng như:
- Chứng thực,
- Mã hóa,
- Đảm bảo toàn vẹn dữ liệu,
- Quản lý truy cập,
- Forwarding / Tunneling.
SSH bảo mật thông qua các khóa để chứng thực (host key, user key, session key), các thuật toán để mã hóa (AES, DES, 3DES, ...) và hàm băm (CRC-32, MD5, SHA-1, RIPEMD-160)
Quy trình của 1 SSH connection:
1 - Một cái bắt tay hóa được thực hiện để khách hàng có thể xác minh rằng nó đang truyền thông với đúng máy chủ nó cần.
2 - Lớp transport của các kết nối giữa máy khách và máy chủ từ xa được mã hóa bằng cách sử dụng một thuật toán mã hóa đối xứng.
3 - Client xác thực chính nó đến máy chủ.
4 - Server tương tác với các client qua kết nối được hóa
Có 2 giao thức SSH là SSH-1 và SSH-2. Hiện nay, đa phần chương trình chạy SSH-2
Quá trình chứng thực server-client bằng việc trao đổi các khóa bất đồng bộ. Mỗi một máy có cặp khóa public - private, khi trao đổi các máy chỉ trao đổi khóa public cho nhau (xem thêm về PKI) và bên kia lưu để xác thực cho những lần sau.
Trong quá trình trao đổi khóa, máy chủ xác định cho client với một host key duy nhất. Nếu client chưa bao giờ liên lạc với máy chủ này trước đó, host key của máy chủ chưa được biết bởi client nó không kết nối.OpenSSH giải quyết vấn đề này bằng cách chấp nhận host keylưu trữ key máy chủ. Điều này được thực hiện sau khi người dùng được thông báo và có cả chấp nhận và xác nhận host key mới. Trong các kết nối tiếp theo, host key của máy chủ được kiểm tra đối với các phiên bản đã lưu trên máy khách, cung cấp sự tự tin rằng khách hàng thực sự là giao tiếp với máy chủ này. Nếu trong tương lai, các máy chủ chốt không còn phù hợp, người dùng phải gỡ bỏ phiên bản lưu của khách hàng trước khi một kết nối có thể xảy ra.
Nói chung, lần kết nối đầu tiên của 2 máy là rất quan trọng.
CÀI ĐẶT SSH
Trên Linux, chương trình chạy SSH hay gặp nhất là OpenSSH, chạy SSH-2 nhưng vẫn hỗ trợ SSH-1.
Mặc định OpenSSH được cài sẵn, có thể kiểm tra bằng rpm -qa openssh (openSSH này bao gồm 2 gói openssh-server và openssh-client)
Để chạy SSH server cần làm thêm thao tác mở port 22.
- File cấu hình /etc/ssh/sshd_config      (còn có file /etc/ssh/ssh_config cấu hình SSH client)
- Start dịch vụ: service sshd start
* Nếu reinstall cần backup host key, bạn cần sao lưu các file /etc/ssh/ssh_host*key*
SỬ DỤNG - SSH CLIENT
ssh -l [user] [SSHserver]   hoặc  ssh user@SSHserver    với user là user trên server, nếu không có -l [user] thì là mặc định là user đang đăng nhập ở máy client.
-> nhập password.
Khi chạy lần đầu, sẽ hiện ra thông báo veryfied host key của server, và sau đó, host key cùng với địa chỉ server này sẽ được lưu vào <thư mục home của user hiện tại trên máy client>/.ssh/known_host
Lần sau, client dùng host key này để so sánh với host key server gửi về, nếu thấy khác nhau, màn hình client sẽ hiện ra thông báo REMOTE HOST IDENTIFICATION HAS CHANGED. Lúc này nếu bạn biết chắc là không có ai nghe lén, bạn xóa nội dung file known_host trên thư mục home của user hiện tại là được.
Thực thi lệnh qua SSH:
- Thực thi lệnh từ xa:  ssh [server] "<lệnh>"       Riêng với các lệnh cần terminal để thực hiện (như vi) thì cần gõ ssh -t [server] "<lệnh>"
File transfer over SSH
- Lệnh copy qua ssh: scp [nguồn] [đích]
     -> Có thể copy từ 2 remote host,
     -> Đòi hỏi lệnh scp phải được cài trên máy remote, nếu không nó sẽ báo lỗi bash not found
     -> Sử dụng wild-card matching và -r đẻ copy kiểu đệ quy.
Tar over ssh
Khi muốn copy số lượng lớn, và muốn giữ lại các thuôc tính như Permission, utimes, owner... ta nên đóng gói tar rồi copy. Cú pháp như sau:
ssh [server] "cd /root ; tar -c ./" | (cd /root ; tar -x)                  (copy từ remote host về máy mình)
(cd /root ; tar -c ./) | ssh [server] "cd /root ; tar -x"                 (copy từ máy mình sang remote)
--> Chú ý là phần lệnh ở máy mình đặt trong (), còn remote host thì đặt trong ""
FTP thông qua SSH
sftp [SSH Server]        -> sử dụng như FTP
(OpenSSH 2.5.0 trở lên mới hỗ trợ)
CẤU HÌNH SSH
Thông tin cấu hình SSH nằm ở /etc/ssh/:
moduli - Chứa nhóm Diffie-Hellman được sử dụng để trao đổi khóa Diffie-Hellman là rất quan trọng cho việc xây dựng một lớp vận chuyển an toàn.
ssh_config - Cấu hình ssh client, nếu có file ~/.ssh/config (chức năng tương tự với 1 user) thì ssh_config sẽ ghi đè file này
sshd_config  -  Cấu hình ssh server.
ssh_host_dsa_key - DSA private key
ssh_host_dsa_key.pub - DSA public key
ssh_host_key - RSA private key của SSH-1
ssh_host_key.pub - RSA public key của SSH-1
ssh_host_rsa_key - RSA private key của SSH-2
ssh_host_rsa_key.pub - RSA public key của SSH-1

Chứng thực không cần password:
SSH có cơ chế chứng thực bằng khóa bất đồng bộ/ khóa công khai (sẽ nói phần sau). Bạn có thể không cần gõ passwprd nhưng phía kia cũng chứng thực được bạn và máy của bạn qua khóa.
1. Đầu tiên bạn phải cấu hình máy SSH server cho phép kiểu chứng thực này, tại máy Server:
vi /etc/ssh/sshd_config
Bỏ # ở 2 dòng:
PublickeyAuthentication yes
AuthorizedKeyFile .ssh/authorized_keys
2. Tại máy Client, dùng chương trình ssh-keygen tạo cặp khóa:
ssh-keygen -t rsa
Nó sẽ tạo 2 key (1 private tại <home>/.ssh/id_rsa và 1 public key tại <home>/.ssh/id_rsa.pub)
3. Ở Server phải đảm bảo có thư mục <home>/.ssh/ (do lệnh ssh-keygen tạo ra chứ không do lệnh mkdir !)
Copy file <home>/.ssh/id_rsa.pub tại client lên server và đổi tên thành <home>/.ssh/authorized_keys :
Tại Client: scp <home>/.ssh/id_rsa.pub SSHserver:<home>/.ssh/authorized_keys
4. Tại Server, restart sshd: service sshd start
(Chú ý rằng: thư mục .ssh/ trên server có chmod là 755)
X Forwarding:
Mở phiên X11 qua một kết nối SSH dễ dàng như kết nối với máy chủ SSH bằng cách sử dụng các tùy chọn-Y
ssh -Y [SSH server]
Port Forwarding
SSH có thể đảm bảo các giao thức TCP / IP khác không an toàn thông qua cổng chuyển tiếp. Khi sử dụng kỹ thuật này, các máy chủ SSH trở thành một "ống dẫn" mã hóa cho khách hàng SSH.
Port forwarding hoạt động bằng cách lập bản đồ một port tại máy local tới một cổng trên máy từ xa.
Từ service / local  --> SSH client / local  ------------> SSH server / remote --> service / remote)
Nếu máy ta đang đứng (SSH client) cũng là máy chủ của dịch vụ (không an toàn mà ta đang muốn bảo mật) thì nghĩa là ta sử dụng Port forwarding Local:
ssh -L local-port:remote-hostname1:remote-port username@remote-hostname2
Sở sĩ có remote-hostname1remote-hostname2 vì đôi khi remote host là máy chủ dịch vụ chưa chắc chạy SSH server. Khi đấy remote-hostname1 là máy chủ dịch vụ và remote-hostname2 là SSH server (điều kiện là máy chủ dịch vụ và SSH server phải kết nối với nhau trong 1 mạng nào đấy).
Ngược lại, ta cũng có thể cấm forwarding bằng cách thêm:
AllowTcpForwarding=NO         trong /etc/ssh/sshd_config


Tham khảo:
http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-openssh.html
Sách SSH Definitive Guide

Nhận xét

Đăng nhận xét