web-dev-qa-db-ja.com

SSHトンネリング:connect_to localhostポート22:失敗

ミドルサーバー(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)

どうしたの?

4
user39463

(報告するエラーは、以下の手順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」アドレスを書き留めます。

Step2)ローカルマシンからSSHを試す

次に、リモートマシンと同じローカルネットワーク上のマシンに移動し、リモートマシンにSSHで接続してみます。ssh [email protected]

それでもうまくいかない場合は、リモートマシンのファイアウォールを確認してください(以下を参照)。

それが成功した場合

ステップ3) MiddlemanマシンからSSHを試す

middlemanマシンにログインし、そこから直接ssh接続を試みます。上記の例では、リモートマシンでssh -R *:9300:localhost:22 middleuser@middleserverを実行したので、middlemachineにログインして次を実行する必要があります。ssh remoteuser@localhost -p 9300

それが成功した場合、問題はサーバーのファイアウォールにある可能性があります。

Iptablesをいじる前に、ファイアウォールマネージャーが使用されているかどうかを確認してください。たとえば、「ufw」が使用されているかどうかを確認します:Sudo ufw status。 iptablesを直接操作するよりもufwを使用する方がはるかに簡単です。

iptables -Lおよびポート9300が開いているかどうかを確認します(これにはiptablesの調査が含まれます。簡単ではありません)。チート:httpの横にポート9300が同様の方法でリストされている場合は、httpが開いているかどうかを確認してください。 9300が以下にリストされている場合、「deny all」タイプのディレクティブがその前にリストされていると到達しない可能性があります。名前付きポートとしてリストされることもあります。 cat /etc/services | grep 9300ただし、この場合、名前は表示されません

ステップ4)もう一度ログインしてください:

ssh remoteuser@middleserver -p 9300
4
JJones

ミドルサーバーのsshdGatewayPorts設定オプションをyesに設定していない場合(デフォルトはビューなしman 5 sshd_options)次に、転送時にバインドアドレスを指定する必要があります。

ssh -R *:9300:localhost:22 user@middleserver

(ローカルマシンのIPアドレスを指定して、より限定的にすることができます)。

これがないと、ループバックデバイスのみがミドルサーバーに転送されます。

1
Anthon

簡単な解決策:

Sudo apt install openssh-server

リモートコンピュータで。

0
knocte