Các kỹ thuật hữu ích khi sử dụng SSH

OpenSSH là một công cụ rất hữu ích dùng để thực hiện điều khiển máy tính từ xa. Các kết nối ssh được mã hóa bởi các thuật toán mã hóa hiện đại đảm bảo an toàn cho các phiên làm việc. Sau đây là một vài kỹ thuật hữu ích khi sử dụng ssh.

1. Mã khóa công khai

Để sử dụng các kỹ thuật ssh bên dưới, bạn cần phải thực hiện các bước sau:

  1. Tạo cặp public/private key. Private key dùng để chứng thực quyền sở hữu của public key.
  2. Thêm public key vào bất cứ server nào bạn muốn remote.

Lệnh sau dùng để tạo ra một cặp public/private key:

$ ssh-keygen -t rsa

Cặp key mới được tạo nằm ở thư mục ~/.ssh với tên mặc định là: id_rsa, tên của private key và id_rsa.pub, tên của public key.

Thêm public key vào file ~/.ssh/authorized_keys cho các user trên các server mà bạn muốn remote.
Thực hiện remote tới server bằng lệnh:

$ ssh user@host

ssh-copy-id. Bạn có thể sử dụng lệnh ssh-copy-id để thực hiện sao chép public key từ máy bạn đến các server. Ví dụ, bạn vừa tạo ra một cặp public/private key với tên là new_key ở thư mục ~/.ssh và muốn cài đặt cho user test trên server có tên là remote, thực hiện như sau:

$ ssh-copy-id -i ~/.ssh/new_key test@remote

Lưu ý: bạn chỉ có thể sao chép public key đến các server mà bạn có quyền ssh vào.

dsa. Ngoài rsa, OpenSSH còn hỗ trợ một kiểu mã khóa công khai khác là dsa. Tuy nhiên, nó không được khuyến khích dùng vì tính bảo mật của nó so với rsa.

2. Tunnelling

Để truy cập đến các server được bảo vệ bởi tường lửa, bạn cần phải tạo một tunnel từ máy bạn đến server xuyên qua một port mà tường lửa cho phép. ssh cung cấp cho bạn một tùy chọn để thực hiện công việc này.

Ví dụ, bạn muốn tạo một tunnel cho web server no-public-access từ máy bạn thông qua user test trên máy ssh-host mà bạn có quyền ssh vào, thực hiện như sau:

$ ssh -L 8080:no-public-access:80 test@ssh-host

Sau khi thực hiện lệnh trên, các request đến http://localhost:8080 sẽ được định hướng đến no-public-access:80 và các response từ no-public-access sẽ được định hướng lại về máy của bạn thông qua ssh-host:80.

3. Mounting Filesystems

sshfs là một công cụ rất hữu ích dùng để chia sẻ dữ liệu trên các máy Linux một cách an toàn. Nó thực hiện mount một thư mục của máy remote vào một thư mục trên máy local.

Ví dụ, để mount thư mục home của user test trên máy ssh-host vào thư mục /mnt/test, sử dụng lệnh sau:

$ sshfs test@ssh-host: /mnt/test

4. Remote File Editing

Để soạn thảo một văn bản trên máy remote với vim bạn có thể thực hiện như sau:

$ vim scp://test@remote/test

Lệnh trên sử dụng vim để mở file test ở thư mục home của user test trên máy remote để soạn thảo.

vim sử dụng scp để thực hiện sao chép file từ máy remote về máy local và thực hiện soạn thảo trên file ở máy local. Khi thực hiện lệnh write, vim sẽ đồng bộ file local với file remote.

5. Tab-Completion

Khi phải ssh đến một máy với tên rất dài, ví dụ như: supercalifragilisticexpialidocious. Bạn có thể sử dụng Tab-Completion thay vì gõ tên đầy đủ của host đó như sau:

$ ssh user@sup<tab>

shell sẽ auto-complete cho bạn, hostname được tự động tìm trong các file ~/.ssh/config, /etc/ssh/ssh_config, ~/.ssh/known_hosts, và /etc/hosts.

6. Lightweight Proxy

ssh cung cấp một tùy chọn để tạo một Lightweight Proxy thông qua một máy mà bạn có quyền ssh vào. Các kết nối đi ra bên ngoài sử dụng Proxy này sẽ được đại diện bởi ssh-host của Proxy đó.

Ví dụ, tạo một SOCKS Proxy với port 9090 như sau:

$ ssh -D 9090 user@ssh-host

Sau khi tạo xong, bạn có thể cấu hình cho trình duyệt web của bạn sử dụng SOCKS Proxy mới tạo để định tuyến cho các traffic của trình duyệt. Ví dụ cấu hình SOCKS Proxy cho trình duyệt firefox như sau:

Alt text

Chú ý: bạn phải cấu hình cho firefoxhttp://about.config như sau để có thể sử dụng được

Alt text

Thử mở trang http://geoiptool.com/ trên trình duyệt, bạn sẽ thấy rằng địa chỉ IP của bạn chính là địa chỉ IP của ssh-host.

SOCKS Proxy sử dụng trong trường hợp nào? Khi bạn cần truy cập đến các dịch vụ bị giới hạn chỉ cho phép các kết nối đến từ Mỹ, bạn có thể thuê một EC2 instance của các nhà cung cấp dịch vụ cloud ở Mỹ để làm Proxy khi bạn kết nối đến các dịch vụ đó.

7. ssh config

Bạn có thể cấu hình cho các kết nối ssh sử dụng các tên thay thế ngắn hơn cho hostname sử dụng file ~/.ssh/config hoặc file /etc/ssh/ssh_config. Ví dụ, bạn muốn ssh đến một máy với lệnh sau (chưa sử dụng ssh_config):

$ ssh -p12345 foo@bar.baz.edu -i ~/.ssh/custom_key

Bạn có thể thêm vào file ~/.ssh/config như sau:

Host bar  
    User foo
    Port 12345
    IdentityFile ~/.ssh/customkey
    HostName bar.baz.edu

Sau đó bạn có thể sử dụng lệnh bên dưới để thực hiện ssh với ý nghĩa tương đương với lệnh ssh ở trên:

$ ssh bar

8. Truy cập trực tiếp đến các máy NAT

Thêm vào file ~/.ssh/config đoạn config sau:

Host behind.bar  
    ProxyCommand ssh -q -W %h:%p bar

ProxyCommand định hướng cho ssh cách để kết nối đến behind.bar: ssh vào bar (với config đã định nghĩa trước đó) sau đó ssh vào behind.bar. Để ssh vào behind.bar với config như trên bạn thực hiện lệnh sau:

$ ssh behind.bar

9. Chia sẻ kết nối

Khi bạn phải làm việc với nhiều phiên kết nối ssh khác nhau trên cùng một máy, bạn có thể sử dụng tính năng chia sẻ kết nối mà ssh cung cấp thay vì tạo các kết nối mới. Đoạn cấu hình sau sẽ thực hiện chia sẻ các kết nối đến busyserver:

Host busyserver  
    Controlmaster auto
    Controlpath ~/.ssh/ssh-%r@%h:%p.sock

Controlmaster với giá trị là auto sẽ tự động chia sẻ các kết nối trên busyserver.

Controlpath tạo ra một file socket trong thư mục ~/.ssh khi bạn thực hiện kết nối đầu tiên đến busyserver, socket này sẽ được sử dụng bởi các kết nối sau đó đến busyserver.

10. Agent Forwarding

Khi bạn ssh đến một server sau đó muốn ssh sang một server khác với key đang dùng thì có thể sử dụng tính năng Agent Forwardingssh cung cấp.

Agent Forwarding được bật với tùy chọn -A khi thực hiện ssh. Ví dụ, bạn muốn thực hiện ssh sang foo rồi tiếp đến sang bar, bạn có thể thực hiện ssh đến foo với tùy chọn -A:

$ ssh -A foo

Sau đó ssh đến bar:

$ ssh bar

Chú ý: để cho phép Agent Forwarding bạn cần phải thực hiện lệnh ssh-add để add key của bạn trước khi thực hiện ssh với tùy chọn Agent Forwarding.

Bạn cũng có thể thực hiện Agent Forwarding bằng cách thêm vào các kết nối ssh trong file ssh_config tùy chọn như sau:

ForwardAgent yes

Tài Liệu Tham Khảo

blog.tjll.net/ssh-kung-fu
ssh manual page (1)
ssh-copy-id manual page (1)
sshfs manual page (1)
scp manual page (1)
ssh_config manual page (1)