中間サーバー(uポート転送)を使用して、マイコンピュータからリモートコンピュータに接続したいと思います。リモートコンピュータで次のコマンドを実行します。
ssh -R 9300:localhost:22 user@middleserver
私のシステムには次のものがあります。
ssh remoteuser@middelserver -p 9300
しかし、私のシステムで次のエラーが発生します。
ssh_exchange_identification: Connection closed by remote host
以下はリモートシステムのログです。
debug1: client_request_forwarded_tcpip: listen localhost port 9309, originator xxx.xxx.xx.xx port 21470
debug2: fd 7 setting O_NONBLOCK
debug1: connect_next: host localhost ([::1]:22) in progress, fd=7
debug2: fd 7 setting TCP_NODELAY
debug3: fd 7 is O_NONBLOCK
debug3: fd 7 is O_NONBLOCK
debug1: channel 1: new [xx.xx.xx.xx]
debug1: confirm forwarded-tcpip
debug3: channel 1: waiting for connection
debug1: channel 1: connection failed: Connection refused
debug2: fd 8 setting O_NONBLOCK
debug1: connect_next: host localhost ([127.0.0.1]:22) in progress, fd=8
debug2: fd 8 setting TCP_NODELAY
debug3: channel 1: waiting for connection
debug1: channel 1: connection failed: Connection refused
connect_to localhost port 22: failed.
debug2: channel 1: zombie
debug2: channel 1: garbage collecting
debug1: channel 1: free: xxx.xxx.xxx.xxx, nchannels 2
debug3: channel 1: status: The following connections are open:
#0 client-session (t4 r2 i0/0 o0/0 fd 4/5 cc -1)
問題は何ですか?
答え1
(報告されたエラーは、以下のステップ1の問題を示しています。)
まず、上記のポスターに従います。GatewayPorts yes
/etc/ssh/sshd_config に追加し、ssh -R 行を次に変更します。
ssh -vvv -R *:9300:localhost:22 user@middleserver
(作業を開始したら -vvv を削除してください)
バインドアドレスを*に設定すると、ループバック(127.0.0.1 == localhostを含む「lo」)だけでなく、すべてのインターフェイスで接続が転送されます。 ifconfig
インターフェイスを一覧表示します。つまり、eth0、lo、wlan0。*
それでも問題が解決しない場合は、次の問題を解決してください。
ステップ1) SSH経由でリモートシステムに接続できることを確認してください。
リモートシステム自体で以下を試してください。
ssh localhost
接続が拒否されたというメッセージが表示されたら、そのコンピュータでSSHを有効にする必要があります。
成功したら、ifconfig
ローカルの「inet 192.168.xxx.yyy」アドレスを入力して記録します。
ステップ2)ローカルマシンでSSHを試してください
次に、リモートコンピュータと同じローカルネットワーク上のコンピュータに移動し、SSHを介してリモートコンピュータに接続します。ssh [email protected]
失敗した場合は、リモートコンピュータのファイアウォールを確認してください(下記参照)。
成功すれば
ステップ3) 中間者(Man-in-the-Middle)システムでSSHを試してください。
中間者(man-in-the-middle)システムにログインし、そこから直接SSH接続を試みます。上記の場合は、すでにssh -R *:9300:localhost:22 middleuser@middleserver
リモートシステムで実行されているため、中間システムにログインして以下を実行する必要があります。 ssh remoteuser@localhost -p 9300
成功すると、サーバーのファイアウォールに問題がある可能性があります。
iptablesを使用する前に、ファイアウォールマネージャを使用していることを確認してください。たとえば、「ufw」が使用されていることを確認するには、次のようにしますsudo ufw status
。 iptablesを直接使用するよりもufwを使用する方がはるかに簡単です。
iptables -L
そして、ポート9300が開いていることを確認してください(これはiptablesの調査が必要です...簡単ではありません)。ヒント:httpの横にポート9300がリストされている場合は、同様の方法でhttpが開いていることを確認してください。 9300が以下にリストされている場合、「すべて拒否」タイプコマンドがその前にリストされていると、そのアドレスに到達できない可能性があります。指定港として記載することもできます。cat /etc/services | grep 9300
しかし、この場合、名前は提案されていません。
ステップ4)もう一度ログインしてみてください。
ssh remoteuser@middleserver -p 9300
答え2
sshd
中間サーバーの設定オプションがyesに設定されていない場合GatewayPorts
(デフォルトはno view man 5 sshd_options
)、転送でバインドアドレスを指定する必要があります。
ssh -R *:9300:localhost:22 user@middleserver
(ローカルコンピュータのIPアドレスを指定することで、より制限的にすることができます。)
それ以外の場合は、ループバックデバイスのみが中間サーバーに渡されます。
答え3
私の場合、私の質問はOPよりはるかに簡単です。私はこれを行うだけです:
sudo apt install openssh-server
リモートコンピュータから。