项目背景:
有一个带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 root@10.238.225.61 通过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 root@10.238.225.61
之后再从主机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 root@10.238.225.61
这样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