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. Cùng Bizfly Cloud tìm hiểu một vài kỹ thuật hữu ích khi sử dụng ssh ngay qua bài viết này nhé.
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:
- Tạo cặp public/private key. Private key dùng để chứng thực quyền sở hữu của public key.
- 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.
~/.ssh/authorized_keys
cho các user trên các server mà bạn muốn remote.$ 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 sshvà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:
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 Forwarding mà ssh 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
Theo Bizfly Cloud chia sẻ
>> Tìm hiểu thêm: Sử dụng SSH an toàn với Fail2ban