12/08/2018, 13:45

Going through one host to reach another server by ssh ProxyCommand

Làm thế nào để ssh tới một server thông qua một server khác? Thông thường khi connect tới server để deploy chẳng hạn, thì chúng ta chỉ cần ssh một lần là ok. Tuy nhiên trong một số trường hợp thì chúng ta cần login vào một server ở giữa để từ đó access vào server đích mong muốn. Như hình vẽ ...

Làm thế nào để ssh tới một server thông qua một server khác?

Thông thường khi connect tới server để deploy chẳng hạn, thì chúng ta chỉ cần ssh một lần là ok. Tuy nhiên trong một số trường hợp thì chúng ta cần login vào một server ở giữa để từ đó access vào server đích mong muốn.

Như hình vẽ dưới đây:

ssh-connection-through-1.png

Trong trường hợp đó thì chúng ta thường nghĩ đến cách như sau.

Với 2 server như trên thì đầu tiên là ssh vào host trung gian Tmp rồi từ Tmp ssh tới Des.

Với 2 câu lệnh dưới đây:

ssh user@Tmp

ssh user@Des

Vậy có cách nào rút ngắn câu này và gộp 2 câu làm một không? Câu trả lời là có.

ssh -tt user@Tmp ssh -tt user@Des command1 arg1 arg2

Nhưng dài thế này thì nhớ thế nào nhỉ? Dù gì chúng ta cũng phải note vào đâu đó đúng không?

Vậy thì sao không note vào đúng chỗ cần note để khi chạy ssh, hệ thống tự động hiểu vào chạy cho ta nhỉ. Thường thì nó sẽ là file config với các cấu hình default đúng không? Đây là cách mà mình muốn giới thiệu. Mục đích là đơn giản, dễ dùng và không mất thời gian nhớ hay tìm kiếm gì cả.

File config của chúng ta nằm trong thư mục này:

~/.ssh

Chính là chỗ chứa các ssh keys và các file cần thiết khi ssh.

Tạo một file config theo cấu trúc như sau:

# profile of user can access server
Host fruit-*
	User	Thao
	IdentityFile	~/.ssh/ida_rsa

# Many server configs
Host fruit-*-t
	ProxyCommand ssh -W %h:%p fruit-tmp-server
Host fruit-tmp-server
	HostName	11.192.12.200
	Port	    10089
Host fruit-grape-t
	HostName	12.102.37.205
Host fruit-banana-t
	HostName	32.103.89.103
    Port        33093
Host fruit-strawberry-t
	HostName	23.122.35.84

Bây giờ khi đã save file config thì đơn giản là chạy dòng lệnh này:

ssh fruit-banana-t

Khi chạy dòng này ta hiểu, khi trỏ đến fruit-banana-t thì nó sẽ thông qua server trung gian fruit-tmp-server với user có profile tên Thao và có identify là id_rsa trong thư mục .ssh

Tuỳ vào mỗi server mà host và port được khai báo khác nhau trong file config.

Và cũng tuỳ vào cách config server mà tham số của command trong file config cũng khác nhau. Có thể tham khảo ở các links dưới đây.

References

http://www.cyberciti.biz/faq/linux-unix-ssh-proxycommand-passing-through-one-host-gateway-server/

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts

0