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:
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