ssh反向代理

快要放寒假了,爲了在家裏也能訪問到內網服務,特地百度了下反向代理的使用方法。

首先準備一臺擁有公共ip的服務器,設爲A,剩下的服務器設爲B, C, D...
最簡單的方法是

ssh -fCNR ${target_port}:localhost:${ssh_port} ${public_host_user}@${public_host_ip}
  • $target_port: 是A的一個端口,執行此命令時不能在A上被佔用
  • $ssh_port: 是B的ssh端口,一般爲22
  • -f: 放到後臺執行,如果不加是放到前臺。

但這樣有一個問題,ssh如果有一段時間沒有任何操作,那麼就會斷開連接。所以要想辦法讓兩個機器其中一個不斷髮心跳包。

解決方法1

修改sshd的配置。
sshd可以直接配置心跳包和重連次數。

解決方法2

寫一個daemon腳本解決問題

export public_host_user=root
export public_host_ip=a.b.c.d
export rinne=10668

直接配置私鑰,如果不用私鑰可以自行百度查找後臺輸入密碼的解決方案。

#!/bin/bash

source ./pssh.sh

while :
do
        ssh -i psshv.pri -CNR ${rinne}:localhost:22 ${public_host_user}@${public_host_ip}
done

設你的daemon腳本爲psshd.sh,那麼就

# under bash
nohup ./psshd.sh &
# or under zsh
nohup ./psshd.sh &!

因爲在內網有很多臺服務器,所以最好寫個自動派發的腳本,或者多進行一段跳外網->公網->內網->其他內網
貼一個完整的./pssh.sh

#!/bin/bash


function set_env() {
    export public_host_user=root
    export public_host_ip=a.b.c.d
    export kamauth0=10667
    export kammaster0=10666
    export rinne=10668
    export kamnode0=10669
}

function print_help() {

    echo kammaster0=10666
    echo kamauth0=10667
    echo rinne=10668
    echo kamnode0=10669
    echo e.g. ssh -p $rinne [email protected]

    echo usage pssh [cmd]
    echo "help                     : just print help of pssh"
    echo "login host-name user-name: login with host-name"
    echo "    host-name:"
    echo "        kammaster0"
    echo "        kamauth0"
    echo "        kamnode0"
    echo "        rinne"
}

function help_login() {
    echo pssh help    ---- to get usage info
    exit 1
}

function login() {
    if [ $# -lt 2 ] ; then
        help_login
    fi
    host_name=`eval echo '$'$1`
    if [ ! -n $host_name ] ; then
        help_login
    fi

    echo ssh -p $1'('$host_name')' $2@127.0.0.1
    ssh -p $host_name $2@127.0.0.1
}

set_env
if [ $# -ge 1 ] ; then
    case "$1" in
        # help) print_help; exit 0 ; break;;
        login) shift 1; login $1 $2; break ;;
        *) print_help; exit 0 ; break;;
    esac
fi
發佈了141 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章