質問: natルーターの背後にあるオフィスホストへのsshアクセス 自宅からオフィスのlinuxホストのsshポートにアクセスしたい。残念ながら、ホストはnatルーターの背後にあります。そのため、ipアドレスは公開されていません。ただし、残念ながら非ルートアクセスのみである別のインターネットホスト(サーバー)へのアクセスがあります。しばらく検索すると、適切な解決策が見つかりません。次の設定: nat(ipは非公開))の背後にあるoffice pc(linux、ルートアクセス)だが、完全なインターネットアクセス。 サーバーpc(linux、ルートアクセスなし)静的およびパブリックipおよび完全なインターネットアクセス。 nat(ipは非公開))の背後にある自宅のpc(linux、ルートアクセス)ですが、完全なインターネットアクセス。 可能な接続:office pc->サーバー<-自宅のpc不可能:office pc <-x- server -x-> home pcホームpcもサーバーもoffice pcへのアクセスを開始できません。ただし、office pcとhome pcの両方がサーバーへの接続を開始できます。リバースsshトンネルが不可能:リバースssh-tunnelと呼ばれる方法を試しました。残念ながら、これには/ etc/ssh/sshd_configでサーバーのgatewayportsを「yes」に設定する必要があります。ここでは、rootアクセスがありません。原則として、それは可能であるべきです:0)サーバー上で、2つのポート(1つは受信、1つは送信)で待機するユーザー空間プログラムを起動します。1)オフィスのpcで、tcp接続をサーバーの送信ポートに開いたままにしておく別のプログラムを実行します。2)自宅からサーバーの受信ポートに接続します。これには標準的な解決策があるはずです。これを解決するための最も迅速でクリーンなソリューションは何ですか?フランク
回答: piskvorのソリューションは機能し、素晴らしいです。ただし、ログインシェルがハングした状態でターミナルが開いたままになります。あまりクールではありません。私は常に、サーバーに接続し、cronで実行して接続を維持するために作成したこの小さなスクリプトを使用してきました。#!/bin/bash target_host=${1:-myserver.example.com} target_port=${2:-7777} tunnel_port=${3:-22} t_user="odin" #check that we have an active connection to the remote system active_process=`ps -ef | \ grep "ssh $target_host -l $t_user -r $target_port:127.0.0.1:$tunnel_port" | \ grep -v grep | \ wc -l` if [ $active_process -lt 1 ]; then echo "`date` : establishing connection to $target_host on port $target_port" screen -m -d ssh $target_host -l $t_user -r $target_port:127.0.0.1:$tunnel_port > /dev/null fi おそらく分離された画面と一緒に、よりエレガントなautosshを使用してpiskvorのソリューションを修正することも、バックグラウンドで接続を維持するために-nt ssh引数を使用することもできます。