Sử dụng SSH để kết nối tới Remote Server trong Ubuntu
SSH là một công cụ căn bản nhất để quản trị hệ thống server họ Linux/Unix. SSH, viết tắt của Secure Shell , là một giao thức được sử dụng để đăng nhập an toàn vào các hệ thống từ xa, là cách phổ biến nhất để truy cập các server Unix/Linux từ xa. Trong hướng dẫn này, ta sẽ thảo luận về cách sử dụng SSH để kết nối với hệ thống từ xa.Cú pháp cơ bản
Dạng cơ bản nhất của lệnh là (chạy lệnh này trên linux/unix):
- ssh remote_host
Remote_host trong ví dụ này là địa chỉ IP hoặc domain mà bạn đang cố gắng kết nối.
Lệnh này giả định tên user trên hệ thống từ xa giống với tên user trên hệ thống local của bạn.
Nếu tên user khác trên hệ thống từ xa, bạn có thể chỉ định tên user đó bằng cách sử dụng cú pháp sau:
- ssh remote_username@remote_host
Khi bạn đã kết nối với server, bạn có thể cần xác minh danh tính bằng cách cung cấp password.
Phần sau, ta sẽ trình bày cách tạo khóa tiện lợi và bảo mật hơn để đăng nhập thay vì password.
Để thoát trở lại phiên local của bạn, chỉ cần nhập:
- exit
SSH hoạt động như thế nào?
SSH hoạt động bằng cách kết nối client với server ssh .
Trong các lệnh trên, ssh là client. Máy chủ ssh đã chạy trên remote_host mà ta đã chỉ định.
Quá trình cần để khởi động server ssh phụ thuộc vào bản phân phối của Linux mà bạn đang sử dụng.
Trên Ubuntu, bạn có thể khởi động server ssh bằng lệnh:
- sudo service ssh start
Trên Ubuntu 16.04 và Debian Jessie, bạn có thể sử dụng systemctl
, lệnh systemd
để quản lý các dịch vụ:
- sudo systemctl start ssh
Lệnh trên sẽ khởi động server sshd và sau đó bạn có thể đăng nhập từ xa.
Cách cấu hình SSH
Khi bạn thay đổi cấu hình của SSH, bạn đang thay đổi cài đặt của server sshd.
Trong Ubuntu, file cấu hình sshd chính được đặt tại /etc/ssh/sshd_config .
Sao lưu version hiện tại của file này trước khi chỉnh sửa:
- sudo cp /etc/ssh/sshd_config{,.bak}
Mở nó bằng một editor:
- sudo nano /etc/ssh/sshd_config
Có một số option có thể xem qua:
Port 22
Khai báo cổng server sshd sẽ lắng nghe kết nối. Theo mặc định, đây là 22. Bạn có thể nên để nguyên cài đặt này, trừ khi bạn có lý do cụ thể để làm khác. Nếu bạn thay đổi cổng của bạn, ở client cần đổi cổng kết nối (xem phần sau).
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
Khai báo khóa server chỉ định nơi tìm khóa server global. Ta sẽ thảo luận về khóa server là gì sau.
SyslogFacility AUTH
LogLevel INFO
Hai mục này cho biết việc ghi log ra sao.
Nếu bạn đang gặp vấn đề với SSH, tăng lượng ghi log có thể là một cách tốt để xem lỗi gì.
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
Các thông số này chỉ định một số thông tin đăng nhập.
LoginGraceTime chỉ định bao nhiêu giây để duy trì kết nối mà không cần đăng nhập thành công.
Có thể là tốt hơn nếu bạn đặt thời gian này cao hơn một chút so với khoảng thời gian đăng nhập bình thường.
PermitRootLogin chọn xem root có được phép đăng nhập trực tiếp hay không.
Trong hầu hết các trường hợp, điều này sẽ được thay đổi thành “no” , khi đó có thể cần tạo account user thường (khác root) có quyền truy cập vào các quyền nâng cao (thông qua su hoặc sudo) và có thể đăng nhập thông qua ssh.
strictModes là chế độ giới hạn, sẽ từ chối đăng nhập khi ai cũng đều có thể đọc được file xác thực.
Điều này chặn đăng nhập khi file cấu hình không an toàn.
X11Forwarding yes
X11DisplayOffset 10
Các tham số này cấu hình một lựa chọn được gọi là Chuyển tiếp X11 . Điều này cho phép bạn xem giao diện user đồ họa (GUI) của hệ thống từ xa trên hệ thống local.
Tùy chọn này phải được cho phép (enable) trên server và được cung cấp cùng với client SSH trong quá trình kết nối với tùy chọn -X
.
Sau khi thực hiện các thay đổi, hãy lưu file bằng lệnh CTRL-X
và Y
, sau đó nhấn ENTER
.
Nếu bạn đã thay đổi cài đặt nào trong /etc/ssh/sshd_config
, hãy khởi động lại server sshd để áp dụng thay đổi:
- sudo service ssh restart
Hoặc, trên các hệ thống systemd
như Ubuntu 16.04 hoặc Debian Jessie:
- sudo systemctl restart ssh
Bạn nên kiểm tra kỹ các thay đổi đảm bảo chúng hoạt động theo cách bạn muốn.
Cách đăng nhập SSH bằng Keys
Mặc có thể đăng nhập vào hệ thống từ xa bằng password, nhưng bạn nên thiết lập xác thực dựa trên khóa .
Xác thực dựa trên khóa hoạt động như thế nào?
Xác thực dựa trên khóa hoạt động bằng cách tạo một cặp khóa: private key và public key .
private key nằm trên client và được bảo mật.
Khóa công khai có thể được cấp cho mọi người hoặc được đặt trên server nào bạn muốn truy cập.
Khi bạn kết nối bằng cặp khóa, server sẽ sử dụng public key để tạo thông báo cho client, thông báo chỉ giải mã được bằng private key của client.
Client sau đó sẽ gửi phản hồi thích hợp trở lại server và server sẽ biết rằng client là hợp lệ.
Toàn bộ quá trình này được thực hiện tự động khi bạn thiết lập khóa.
Cách tạo khóa SSH
Khóa SSH nên được tạo ra trên máy tính mà bạn muốn dùng làm client. Đây thường là máy tính local của bạn.
Nhập thông tin sau vào dòng lệnh (nếu dùng window, có thể tải OpenSSL để cài đặt, sẽ có các công cụ tương ứng này) :
- ssh-keygen -t rsa
Nhấn enter để chấp nhận các giá trị mặc định. Khóa của bạn sẽ được tạo tại ~ / .ssh / id_rsa.pub và ~ / .ssh / id_rsa .
Thay đổi vào .ssh
bằng lệnh:
- cd ~/.ssh
Xem các quyền của các file:
- ls -l
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
Như bạn thấy, file id_rsa
chỉ có thể đọc và ghi được đối với chủ sở hữu. Đây là cách nó nên được giữ bí mật.
Tuy nhiên, file id_rsa.pub
có thể được chia sẻ và có các quyền thích hợp cho hoạt động này.
Cách chuyển public key của bạn đến server
Bạn có thể sao chép public key vào server từ xa bằng cách ra lệnh sau:
- ssh-copy-id remote_host
Thao tác này sẽ bắt đầu một phiên SSH, cần xác thực bằng password của bạn.
Sau khi bạn nhập password, nó sẽ sao chép public key của bạn vào file khóa được ủy quyền của server, cho phép bạn đăng nhập mà không cần password vào lần sau.
Tùy chọn phía client
Có một số cờ tùy chọn mà bạn có thể chọn khi kết nối qua SSH.
Một số trong số này có thể cần thiết với cài đặt trong cấu hình sshd của server từ xa.
Ví dụ: nếu bạn đã thay đổi số cổng trong cấu hình sshd của bạn, bạn cần phải khớp cổng đó ở phía client bằng lệnh:
- ssh -p port_number remote_host
Nếu bạn chỉ muốn thực hiện một lệnh duy nhất trên hệ thống từ xa, bạn có thể chỉ định sau server như sau:
- ssh remote_host command_to_run
Bạn sẽ kết nối với máy từ xa, xác thực và lệnh sẽ được thực thi.
Như ta đã nói trước đây, nếu chuyển tiếp X11 được bật trên cả hai máy tính, bạn có thể truy cập chức năng đó bằng lệnh:
- ssh -X remote_host
Cung cấp cho bạn các công cụ thích hợp, các chương trình GUI trên hệ thống từ xa giờ có thể mở cửa sổ trên hệ thống local của bạn.
Tắt xác thực password
Nếu đã tạo khóa SSH, bạn có thể tăng cường bảo mật cho server bằng cách tắt xác thực chỉ bằng password. Ngoài console, cách duy nhất để đăng nhập vào server sẽ là thông qua private key ghép nối với public key mà bạn đã cài đặt trên server.
Lưu ý: Trước khi bạn tiếp tục bước này, hãy đảm bảo bạn đã cài đặt public key cho server. Nếu không, bạn sẽ bị khóa!
Như là user root hoặc user không phải root với quyền sudo, mở file cấu hình sshd:
- sudo nano /etc/ssh/sshd_config
Tìm dòng ghi Password Authentication
và bỏ ghi chú bằng cách xóa dấu #
ở đầu. Sau đó, bạn có thể thay đổi giá trị của nó thành “no”:
PasswordAuthentication no
Hai cài đặt khác không cần phải sửa đổi (miễn là bạn chưa sửa đổi file này trước đó) là PubkeyAuthentication
và ChallengeResponseAuthentication
. Chúng được đặt theo mặc định và sẽ đọc như sau:
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Sau khi thực hiện các thay đổi, hãy lưu file.
Đến đây bạn có thể tải lại daemon SSH:
- sudo systemctl restart ssh
Xác thực password bây giờ sẽ bị vô hiệu hóa và server chỉ có thể truy cập được thông qua xác thực khóa SSH.
Kết luận
Như vậy bạn đã làm quên SSH, công cụ kinh điển để quản trị hệ thống. Khi sử dụng các tùy chọn khác nhau, bạn sẽ khám phá ra nhiều chức năng tiên tiến hơn có thể giúp công việc dễ dàng hơn. SSH vẫn được ưa chuộng vì nó an toàn, nhẹ và hữu ích.
Các tin trước
Backup postgresql databases trên Ubuntu vps 2013-08-28
Sử dụng Cron để tự động hóa các công việc việc trên server 2013-08-23
Bảo mật postgresql trên Ubuntu vps 2013-08-22
Sử dụng sftp-to-securely-transfer-files với remote-server 2013-08-13
Quản trị packages trong Ubuntu và Debian với apt-get-apt-cache 2013-08-06
Sử dụng roles và quản lý cấp quyền trong postgresql trên vps 2013-08-05
Lệnh truy vấn SQL trong postgresql sử dụng select 2013-08-02
Các lệnh truy cấn quản lý bảng dữ liệu trong postgresql trên cloud-server 2013-08-01
Bảo mật MySQL và MariaDB Databases trên Linux VPS 2013-07-23
Cài đặt Firewall với UFW trên Ubuntu và Debian Cloud Server 2013-06-25