Introduction
Secure Shell (SSH) là một chương trình cung cấp phương thức để quản trị hệ thống từ xa (remote system administration). Tất cả các credential và message đều sẽ được mã hóa. Hơn thế nữa, tất cả các câu lệnh đều được gửi qua một kênh mã hóa.
Để sử dụng SSH, ta cần phải có một SSH server và một SSH client. Theo mặc định thì SSH server sẽ chạy ở port 22.
Command
Câu lệnh để kết nối đến SSH server:
ssh username@MACHINE_IP
Với username
là tên của user ở trên máy có địa chỉ IP là MACHINE_IP
. Sau khi nhập câu lệnh trên thì ta cần nhâp password.
SCP
Chúng ta có thể sử dụng SSH để trao đổi file bằng cách sử dụng SCP (Secure Copy Protocol), là một giao thức dựa trên giao thức SSH.
Ví dụ:
scp mark@MACHINE_IP:/home/mark/archive.tar.gz ~
Khi sử dụng câu lệnh này cũng cần phải nhập password.
Trong ví dụ trên, ta thực hiện sao chép tập tin /home/mark/archive.tar.gz
của máy remote vào thư mục ~
ở máy local.
Ví dụ khác:
scp backup.tar.bz2 mark@MACHINE_IP:/home/mark/
Với ví dụ này, ta thực hiện sao chép tập tin backup.tar.bz2
ở máy local vào thư mục /home/mark/
ở máy remote.
Ngoài ra, ta cũng có thể sử dụng giao thức FTP mà áp dụng giao thức SSL/TLS (tạo thành giao thức FTPS, hoạt động ở port 990) để trao đổi tập tin.
Tunneling
Tunneling (bản chất là port forwarding) là một tính năng của SSH cho phép chuyển tiếp các kết nối mạng thông qua một kênh mã hóa.
Local Forwarding
Dùng để truy cập một service ở localhost của remote machine. Các ví dụ:
- Truy cập vào database sử dụng UI tool.
- Sử dụng trình duyệt để truy cập vào web service ở trong private network của remote machine.
- Truy cập vào một port của container.
Câu lệnh sử dụng:
ssh -L [local_addr:]local_port:remote_addr:remote_port [user@]sshd_addr
Giải thích câu lệnh trên:
- Flag
-L
giúp chỉ định việc thực hiện local port forwarding. - SSH client ở trên local machine sẽ lắng nghe trên port
local_port
. - Tất cả các traffic đến
local_port
sẽ được forward đếnremote_addr:remote_port
ở remote machine.
Ví dụ minh họa:
Tip
Sử dụng
ssh -f -N -L
để chạy local port-forwarding session trong nền.
Local Port Forwarding with a Bastion Host
Câu lệnh ssh -L
còn cho phép forward local port đến remote port trên bất cứ remote machine nào chứ không nhất thiết phải là SSH server. Cụ thể, giá trị remote_addr
và sshd_addr
không nhất thiết phải giống nhau.
ssh -L [local_addr:]local_port:remote_addr:remote_port [user@]sshd_addr
Ví dụ minh họa:
Trong hình trên, SSH server được gọi là bastion host.
Remote Port Forwarding
Dùng trong trường hợp ta muốn expose một local service ra ngoài internet.
Câu lệnh sử dụng:
ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addr
Theo mặc định, câu lệnh trên sẽ sử dụng localhost của gateway (SSH server) như là remote address. Nói cách khác, local port của local machine sẽ chỉ có thể được truy cập bởi SSH server. Để sử dụng địa chỉ public của SSH server làm remote address, ta cần cấu hình option GatewayPorts
của SSH server thành yes
.
Ví dụ minh họa:
Tip
Sử dụng
ssh -f -N -R
để chạy remote port-forwarding session ở trong nền.
Remote Port Forwarding From a Home/Private Network
Máy sử dụng SSH client sẽ đóng vai trò là bastion host để forward các kết nối từ bên ngoài đến một local service bên trong mạng riêng tư.
Câu lệnh sử dụng:
ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addr
Cặp local_addr:local_port
là địa chỉ và port của local service ở trong mạng riêng tư.
Ví dụ minh họa:
Summary
- Local port forwarding là SSH client lắng nghe trên một port mới.
- Remote port forwarding là SSH server lắng nghe trên một port bổ sung khác.
- Để dễ nhớ, trong câu lệnh
ssh -L local:remote
vàssh -R remote:local
thì host bên trái luôn mở một port mới.