做产品的同学们,特别是toB业务的,需要对产品和售后负责,有很多产品,需要做运维,如果产品是分散的,那维护起来就非常麻烦,如果产品分散且移动的,那售后成本就非常大。那么,针对这些问题,下面跟你分享一下很实用的技术,"你是我的眼",为什么这么说呢,假如,你的产品在汽车上使用,那正好影响了客户业务,非常紧急,需要处理,这个时候,通过这个技术,可以让你犹如身临其境一样,你跟车辆或设备,当前无论远在天涯海角,近在眼前。
本篇文章价值无限,因为,客户的紧急问题,可能你的领导关注了,或者惊动了你的老板,这个时候,你就像热锅上的蚂蚁,8之脚无处安放中。轻则挨一顿批,出差去解决。重则,挨多顿批,谁知道有什么更坏的处境呢。 所以,你如果有这个预案,那么,客户现场的问题,你在办公室动动手指就能解决,而且,神不知鬼不觉。领导对你一顿猛夸,甚至升职加薪!
好了,下面就用通俗的语言和实例,来介绍下今天的主角,SSH反向代理。概括来讲,就是通过ssh来登陆远方任意设备,通过代理服务器作为中继来登陆。
首先,下载ssh源码,通过交叉编译,部署到你的嵌入式设备上。做一个可执行的脚本ssh_proxy.sh
#!/bin/sh
# ssh_reverse_proxy_exp proxy_port remote_ip remote_ssh_port remote_username remote_passwd
ssh_reverse_proxy_exp() {
#####################
expect <<EOF
set timeout -1
spawn ssh -p $3 -CNR $1:localhost:22 $4@$2
expect {
"*yes/no" { send "yes\n"; exp_continue }
"*password:" { send "$5\n" }
timeout { exit 127 }
}
expect eof
EOF
######################
}
if [ $# -ne 5 ];then
echo "usage: $0 [proxy_port] [remote_ip] [remote_ssh_port] [remote_username] [remote_passwd]"
exit 127
fi
ssh_reverse_proxy_pid=$(pidof ssh)
if [ $? -eq 0 ];then
kill -9 $ssh_reverse_proxy_pid
fi
proxy_port=$1
remote_ip=$2
remote_ssh_port=$3
remote_username=$4
remote_passwd=$5
success=0
try_count=0
while true;do
try_count=$(($try_count+1))
if [ $try_count -gt 5 ];then
break
fi
ssh_reverse_proxy_exp $proxy_port $remote_ip $remote_ssh_port $remote_username $remote_passwd
sleep 1
ssh_reverse_proxy_pid=$(pidof ssh)
if [ $? -eq 0 ];then
echo "pidof ssh = $ssh_reverse_proxy_pid"
success=1
break
fi
sleep 1
done
if [ $success -eq 1 ];then
echo "ssh reverse proxy success!"
exit 0
else
echo "ssh reverse proxy failed!"
exit 127
fi
只要你的设备有后台,可以通过后台,做一个命令入口,下发代理命令:ssh_proxy.sh 中间代理服务器端口port 代理服务器ip 代理服务器登陆端口 代理服务器登陆用户名 代理服务器登陆密码
其中"中间代理服务器端口port",你在本地登陆上代理服务器,通过查看端口号:netstat -anp |grep 22
或者 netstat -anp |grep 端口号
可以查询到 "中间代理服务器端口port" 是不是已经被使用,如果存在,说明你的设备已经连上中间服务器,此时,你可以进行远程登陆了。
命令行:ssh root@localhost -p port
其中port就是 "中间代理服务器端口port",这个port就是你用脚本连接时填入的端口号,你可以找没用的端口进行连接,自己填的。
接下来会弹出登陆用户名和密码,此时的就是你的设备的登陆信息,所以,你的设备需要设置登陆用户名和密码,不允许不设置。有了登陆信息,你就可以登陆设备了。
只要你的设备能够联网,你就可以通过ssh代理进行远程服务器的登陆。
此时,设备就在你眼前,没错,你可以为所欲为了!