2013年7月2日 星期二

利用ssh ProxyCommand及nc做跳板的連線應用

在我的工作環境裡,利用跳板連線到客戶的主機是家常便飯的事情,但是常需要同時連線到很多台主機上維護,這時就要一再的輸入指令連線到跳板,然後在連到客戶的主機,身為科技人應該要有懶惰的美德,我們可以利用ssh的ProxyCommand來幫我們自動連線。

讓我來舉個例子,假如我要連線到 customer.whatever.com 這台主機,但是要透過跳板主機才能連線時,如何利用ProxyCommand讓我們的生活更美好。

另外ProxyCommand也適用於scp及sftp,也就是要傳檔時也能用ProxyCommand代勞囉

[主機資料]

「跳板主機」
hostname: jump.linux.com
ssh port: 5566
user: user1 <-- 這個使用者是你的跳板帳號

「客戶主機」
hostname: customer.whatever.com
ssh port: 22
user: linuxuser <-- 這個使用者是客戶主機的帳號

[設定方式]

請編輯~/.ssh/config,並加上如下設定
Host customer
Hostname customer.whatever.com <--跳板主機要能正確解析hostname才行,否則請填IP
User linuxuser
ForwardAgent yes
Port 22
ProxyCommand ssh user1@jump.linux.com -p 5566 nc %h %p

[使用方式]
要使用ProxyCommand非常容易,只要下 ssh customer 並輸入密碼就好了,如下:

Shell>$ ssh customer
user@jump.linux.com's passoword:
linuxuser@customer.whatever.com's password:
Last login: Tue Nov 9 00:57:51 2010 from 22.33.44.55
[linuxuser@customer]$ 



還有另一種情況,就是假設customer.whatever.com是台web主機,你想連到他的資料庫主機,但要透過customer才能連的到,也就是說我要跳過兩台主機才能連到資料庫,這時ProxyCommand就超好用的。

[資料庫主機資料]

hostname: db.whatever.com
ssh port: 22
user: dbuser

[設定方式]
請編輯~/.ssh/config,並設定如下
Host customer
Hostname customer.whatever.com
User linuxuser
ForwardAgent yes
Port 22
ProxyCommand ssh user1@jump.linux.com -p 5566 nc %h %p

Host db
Hostname db.whatever.com
User dbuser
ForwardAgent yes
Port 22
ProxyCommand ssh linuxuser@customer nc %h %p

[連線方式]
請注意紅色字體的部份,確實連線到db主機囉

Shell>$ ssh db
user@jump.linux.com's passoword:
linuxuser@customer.whatever.com's password:
linuxuser@db.whatever.com's password:
Last login: Tue Nov 9 01:05:05 2010 from 192.168.1.2
[linuxuser@db]$ 

參考資料
man ssh_config

轉貼至http://beakdoosan.blogspot.tw/

沒有留言:

張貼留言