這麼個狀況:ssh
機器A:處於內網,能夠鏈接Bspa
機器B:處於公網,不能鏈接A代理
目標:機器B直連機器Acode
經過反向代理實現:server
內網上機器A進行操做:blog
ssh -f -N -R 11111:localhost:22 username_B@機器B的公網ipip
外網上機器B進行操做:rem
ssh username_A@localhost -p 11111it
這裏的11111能夠換成不衝突的任意端口號反向代理
固然,兩邊的public key要互相添加
附:
自動守護腳本
#! /usr/bin/perl use strict; use warnings; while(1){ my $status=✓ print "status: $status\n"; if(!$status){ &start(); print "connected\n"; } sleep(3) } sub start{ system("ssh -f -N -R 11111:localhost:22 username_B\@serverB_IP -o ExitOnForwardFailure=yes"); } sub check{ my $a=`ps -ef | grep '11111:localhost:22' | grep -v 'grep' | wc -l`; my @a=split(/\s+/,$a); my $result=$a[0]; return($result); }
出現Error: remote port forwarding failed for listen port 11111這個錯誤的解決辦法
在機器B上
1,netstat -anp
2,kill PID
爲了防止ssh自動中斷,須要在機器B上按期與機器A通信
#! /us/bin/perl while (1) { `ssh -p 11111 username_A\@localhost \"echo 1\"`; sleep(10) }