2012年10月9日星期二

SSH反向連接

#!/bin/bash

function line()         {
while [ ! -f /tmp/stop ];
do ssh -o ExitOnForwardFailure=yes -R 4334:localhost:22 user@remotehost.com "while netcat -zv localhost 4334; do sleep 300; done";
sleep 5;
done
}

line &


ssh有個很好用的能力,就是建立反向連接。
之前有講過ssh的tunnel,反向連接有點類似但是方向相反。
先看代碼:
$ ssh -N -L 4334:localhost:4334 user@remotehost.com &
這樣就可以把localhost的4334port反向連接到remotehost的4334,有點神奇的。
向remotehost4334port建立的連接等同於連接到localhost

回到一開頭的bash script,有時候電腦在防火檣後面或NAT後面,想要在外面連進去會被限制。
這時候可以用ssh的反向連接能力,例如把本機的22port連接去遠端的4334port。
在遠端主機可以用4334port登入ssh去後面的電腦
因為ssh連接長時間閒置可能會被斷開,所以要加一個while讓它不停自動重連。
同時斷開後要退出ssh進程,連接後使用netcat檢查一下連接是否存在。
由於自動重連需要免密碼登入,可參考這裏
發佈留言

熱門文章