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ỉ IPMACHINE_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 đến remote_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_addrsshd_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:remotessh -R remote:local thì host bên trái luôn mở một port mới.

Resources