項目背景:
有一個帶sd接口的電路板P,沒有wifi不能聯網,現在要通過ssh隧道實現兩個功能:
1. 可以讓一臺linux主機通過ssh登陸到P板進行程序調試等操作;
2. 在P板上直接運行需要聯網獲取數據的程序。
1. 假設有一臺主機A能聯網,將P板SD接口插在主機A上,這樣可以將P板看成主機A的一個SD卡,組內的人制造了一套工具,可以通過SD口和主機A實現上面所需的上網功能。具體的實現不是特別清楚,大概就是監聽主機A的一個固定端口(假設是2200),有各種消息來的時候去對應地操作SD卡(P板)實現不同的功能。
比如:ssh -p 2200 [email protected] 通過ssh方式登陸到P板(10.238.225.61是主機A的ip, root是P板虛擬的ssh登陸用戶名)
由於實現方式的侷限性,上面這樣ssh只能開一個,需要多開幾個ssh或者ssh登陸着的同時想要scp向P板copy東西的話,就需要在本地(我們假設稱之爲主機B)第一次ssh登陸P板時開一個Local forward端口(假設是2222),如:
$ssh -p 2200 -L 2222:127.0.0.1:22 [email protected]
之後再從主機B登陸P板可以這樣:ssh -p 2222 root@localhost
通過scp命令由主機B向P板copy東西,可以這樣:scp -P 2222 stock root@localhost:/zcy
這裏要說明的是,127.0.0.1:22是指P板的22端口,至於怎麼是22,之前講了,P板是通過一個工具利用主機A實現聯網的,端口22就是在工具的配置文件中寫死的。
2. 我們假設主機B可以通過一個代理服務器聯外網,可以ssh登陸P板,那麼可以在主機B ssh登陸P板時開一個Remote forward端口,讓P板可以聯外網。
$ssh -p 2200 -R 8080:10.7.211.16:912 [email protected]
這樣P板上就可以通過localhost:8080端口聯外網了。在P板上還要設置一下環境變量,指定proxy:
#export http_proxy=http://127.0.0.1:8080/
這裏要說明的是10.7.211.16:912是主機B聯外網的代理服務器地址和端口。
參考文章:
http://blog.pluskid.org/?p=369
http://blog.wuxinan.net/archives/78