突然(読み取り:パラメーターを変更せずに)、私のnetbsd仮想マシンが奇妙に動作し始めました。症状はSSHトンネリングに関係しています。
私のラップトップから起動します:
$ ssh -L 7000:localhost:7000 user@Host -N -v
次に、別のシェルで:
$ irssi -c localhost -p 7000
Sshデバッグは言う:
debug1: Connection to port 7000 forwarding to localhost port 7000 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 7000 for localhost port 7000, connect from 127.0.0.1 port 53954, nchannels 3
Localhost:80でも(リモート)Webサーバーに接続してみましたが、同じ結果が得られました。
リモートホストはNetBSDを実行します:
bash-4.2# uname -a
NetBSD Host 5.1_STABLE NetBSD 5.1_STABLE (XEN3PAE_DOMU) #6: Fri Nov 4 16:56:31 MET 2011 root@youll-thank-me-later:/m/obj/m/src/sys/Arch/i386/compile/XEN3PAE_DOMU i386
少し迷ってしまいました。私はリモートホストでtcpdump
を実行してみましたが、次の「悪いchksum」を見つけました。
09:25:55.823849 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 67, bad cksum 0 (->3cb3)!) 127.0.0.1.54381 > 127.0.0.1.7000: P, cksum 0xfe37 (incorrect (-> 0xa801), 1622402406:1622402421(15) ack 1635127887 win 4096 <nop,nop,timestamp 5002727 5002603>
Sshデーモンを再起動して無用に試しました。私はまだ再起動していません-おそらくここの誰かが他の診断を提案できます。私はそれが仮想ネットワークカードドライバーであるか、誰かが私たちのsshをルート化したのではないかと思います。
アイデア..?
問題が解決しました:
$ ssh -L 7000:127.0.0.1:7000 user@Host -N -v -v
...どうやら、 'localhost'はリモートホストから高く評価されませんでした。しかし、リモート/etc/hosts
に含まれるもの:
::1 localhost localhost.
127.0.0.1 localhost localhost.
ローカルネットワークインターフェースが
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33184
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
はぁ。 100rpの賞金のために私がかけた:)
OPの問題はすでに解決されていますが、sshから同じエラーメッセージが表示され、他のサイトで解決策が見つからなかったため、問題の解決策を共有することにしました。
私の場合、IPv6でのみリッスンするサービスに接続する必要がありました。私は試した:
ssh -f [email protected] -L 51005:127.0.0.1:51005 -N ssh -f [email protected] -L 51005:localhost:51005 -N
他にもいくつかの方法がありますが、うまくいきませんでした。 http://localhost:51005
に接続しようとすると、次のようなエラーが発生します:channel 2: open failed: connect failed: Connection refused
解決策は次のとおりです。
ssh -f [email protected] -L 51005:[:: 1]:51005 -N
IPv6アドレスは角括弧で囲む必要があります。
私はこれを最初に試します。
$ ssh -L 7000:127.0.0.1:7000 user@Host -N -v -v
「-v」を3回まで使用して、詳細度を上げることができます。
このエラーメッセージcanは、ファイアウォールがポート7000をブロックする場合に発生すると思いますが、すでに除外されています。 (後で読者がそれを除外していない場合は、netstat --numeric-ports
の出力を確認してください。)
I thinkこのエラーメッセージは、sshがアップデート後にIPV6アドレスを初めて認識したときに、ずっと前に見たかもしれません。私はそれについて間違っているかもしれません。実験したい場合は、IPV6ループバックアドレス "0:0:0:0:0:0:0:1"(または ":: 1")を試すことができます。
「...どうやら、 'localhost'はリモートホストに好かれなかったようです。しかし、リモートの/ etc/hostsには次のものが含まれています: "
あなたがクライアント上でsshを実行していたことを除いて、 'localhost'はあなたのクライアントに好かれませんでした。リモートの/ etc/hostsファイルは、リモート接続outではなくincoming接続用です。
Sshトンネルを介して別のサーバーのmysqlに接続しようとしたときに、同じエラーが発生しました。ターゲットサーバーの/etc/my.cnfのbind-addressパラメータが、内部ではなく外部IP(dual NIC server))にバインドされていることがわかりました。
Bind-address = 127.0.0.1を設定すると、次のようにsshトンネルを正常に使用できます。
ssh -N -f -L 3307:127.0.0.1:3306 [email protected]
mysql -h 127.0.0.1 --port=3307 --protocol=TCP -uusername -ppassword
Localhostの代わりに完全なドメイン名でポートを転送しているときに、このエラーが発生しました:
ssh -L 5900:Host.name.com:5900 x11vnc
ポートはlocalhostに対してのみ開かれていたため、完全修飾名の接続を受け入れるには、バインディングポートの説明を追加する必要がありました。
ssh -L *:5900:Host.name.com:5900 x11vnc
どこからでも接続できます(安全性が低いため、慎重に使用してください)。
別の解釈は、私の場合、あなたがそれを間違ってタイプすることです。
user@Host ~ $ ssh -vvvNL 4444:127.0.0.0.1:4444
...
channel 2: open failed: connect failed: Name or service not known
ここで発生するのは、IPアドレスにゼロが多すぎるため、有効なアドレスではないことです。そのため、sshはそれを解決できないドメイン名として扱います。おっとっと!
PS:私はこれを補足するので、同じ症状をトラブルシューティングするときに起こりうる問題の包括的なリストを持っています。
私にとっては、先頭に「:」を追加するとうまくいくので、あなたの場合のコマンドは次のようになります:
ssh -L :7000:localhost:7000 user@Host -N -v
???
チャネル2:オープン失敗:接続失敗:接続が拒否されました
user@Host
リスニングポート7000は何もありません。それは単純で、それだけです。
私にとっては、ssh -L <port>:<remote server IP>:<port> <login>@<remote server IP>
やるべきことssh -L <port>:127.0.0.1:<port> <login>@<remote server IP>
。
これが誰かを助けることを願っています!
同じエラーメッセージが表示されました。
チャネル3:オープン失敗:接続失敗:接続が拒否されました
そして、原因は人為的エラーでした-私が指定したものとは別のリモートホストのポートにアクセスしようとしました。
私がそれを共有すると思いましたが、これはおそらくあなたのほとんどがこのエラーを経験している理由ではありません。
IPアドレスがありません--ip=n.n.n.n
行末にあります。接続するIPを正確に指定する必要があります。
私にとってうまくいったのは、コマンドの順序を切り替えることでした。
だから基本的に -
$ ssh user @ Host -L 7000:localhost:7000 -N
奇妙な