私はnotを使用してhosts.allow
またはhosts.deny
を使用しています。Linuxマシンではなく、Windowsマシン(同じラップトップ、別のハードドライブ)からSSHがさらに機能します。
ssh -vvv root@Host -p port
は以下を提供します:
OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to Host [Host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer
Windowsマシンではすべてが正常に機能するため、セキュリティログを確認し、その中の行が同一であることを確認します。サーバーは2つの異なる「マシン」を同じように扱い、両方とも公開鍵認証で許可されます。
つまり、これは私のローカルArchLinuxラップトップの問題であるに違いないという結論につながります。
[torxed@archie ~]$ cat .ssh/known_hosts
[torxed@archie ~]$
それは問題ではありません。
[torxed@archie ~]$ Sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ファイアウォール設定との競合はありません(今のところ)。
[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------ 2 torxed users 4096 Sep 3 2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw------- 1 torxed users 1679 Sep 3 2013 id_rsa
-rw-r--r-- 1 torxed users 403 Sep 3 2013 id_rsa.pub
-rw-r--r-- 1 torxed users 170 May 11 11:21 known_hosts
アクセス許可は問題ないようです(サーバー上で同じです)。/etc/ssh/ssh_config
を構成せずに試したところ、クライアントで多数の自動構成が行われ、同じエラーが発生することを除いて、同じ結果が得られました。
「外部」の要因を除外している場合は、通常、次の一連の手順が原因を絞り込むのに役立ちます。したがって、これはあなたの質問に直接答えるものではありませんが、エラーの原因を追跡するのに役立ちます。
sshd
このような場合に一般的に非常に便利だと思うのは、デーモン化させずにsshd
を起動することです。私の場合の問題は、syslog
も_auth.log
_も意味のあるものを示さないことでした。
私がターミナルからそれを開始したとき、私は得ました:
_# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.
_
ずっといい!このエラーメッセージにより、何が問題かを確認して修正できました。どちらのログファイルにもこの出力は含まれていませんでした。
NB:少なくともUbuntuでは、$(which sshd)
が、絶対パスのsshd
要件を満たす最良の方法です。そうしないと、次のエラーが発生します:_sshd re-exec requires execution with an absolute path
_。 _-p 10222
_はsshd
を代替ポートでリッスンさせ、構成ファイルを上書きします。これは、実行中のsshd
インスタンスと競合しないようにするためです。ここで空きポートを選択してください。
最後に、代替ポート(_ssh -p 10222 user@server
_)に接続します。
この方法は、認証の問題やその他の種類の問題を見つけるのに何度も役立ちました。本当に詳細な出力をstdout
に取得するには、$(which sshd) -Ddddp 10222
を使用します(詳細度を上げるためにdd
が追加されていることに注意してください)。デバッグの詳細については、_man sshd
_を確認してください。
この方法の主な利点は、デフォルトのポートでsshd
を再起動する必要がないsshd
構成なしを確認できることです。 通常 これは既存のSSH接続に干渉しないはずですが、私はそれを確認しました。したがって、これにより、リモートサーバーへのアクセスを遮断する前に、構成ファイルを検証できます(たとえば、一部のVPSや、帯域外アクセスを取得するために追加料金を支払う必要がある物理サーバーの場合は遮断します)マシンに)。
また、SSHセッションをホストするためのプロセスをフォークするための連続したメモリをページに割り当てることができないほどメモリが断片化されているホストを使用することもできます。
このような場合、次のいずれかのメッセージを取得できます。
ssh_exchange_identification: read: Connection reset by peer
または:
Connection closed by aaa.bbb.ccc.ddd
ホストが救済するまでの距離によって異なります。
メモリの断片化が明らかな原因である場合、解決策は他の方法でサーバーにアクセスし、関連するサービスの一部を再起動することです。 VMにはスワップパーティションがないため、ApacheとMySQLがVMの原因であることがわかりました。それが失敗した場合は、ホストを再起動します。
念のため、これは私に起こったからです。ホストでsshdが実行されていることを確認してください!
それは愚かな失敗ですが、本当にあなたの問題かもしれません。
このエラーは、サーバーへのsshセッションの超過が原因であることがわかりました。接続しようとしているホストを見つけ、すべてのクライアントからのすべてのセッションを強制終了しました。すべてのセッションをクリアした後、問題は解決しました。
私はssh_exchange_identification: read: Connection reset by peer
ループで16以上のSSHセッションを開始するスクリプトの問題。 sshdはどうやら追いつけません。短い睡眠を追加すると私の問題が解決しました:
for i in $(seq 32)
do
ssh -f root@$Host "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
# for > 8 connections, ssh has ssh_exchange_identification issues
sleep 0.1
done
エラーが発生しましたssh_exchange_identification: Connection closed by remote Host
SSHに接続しようとすると、ローカルコンピュータのSSHポート22にリモートポート転送を実行して、インターネット上のリモートサーバーから一時的にアクセスできるようにしました。
実際、エラーが表示されたのは、起動時にSSHサービスを無効にしたことを覚えていないため、ローカルコンピューターでSSHサービスを開始する必要があったためです:Sudo service ssh start
。
あるいは、昨夜私がしたことをして、/ var/emptyを削除したかもしれません。どうやらそのディレクトリとその権限はsshdの機能に不可欠であり、再起動してもディレクトリは再作成されません_/etc/init.d/sshd
_は再起動に失敗し、systemdは何も理由を教えません。
フォアグラウンドでsshdを実行して問題を見つけました:
_# /usr/sbin/sshd -Dd
Missing privilege separation directory: /var/empty/sshd
_
私の場合、ディレクトリを再構築すると問題が解決しました:
_drwxr-xr-x. root root /var/empty
drwx--x--x. root root /var/empty/sshd
_
Linuxプログラマへの注意:_/var/empty
_の非常に重要なもの...本当に???
まず最初に;ホストIPアドレスにtelnetして、ポート22がそのホストで実際にリッスンしている(開いている)かどうかを確認します。
telnet x.x.x.x 22
(そうでない場合は、コンソールケーブルを接続してログインできます)
私の場合、それは機能していなかったので、コンソールケーブルを接続してログインしました。ログインすると、そのホスト(Ciscoルーター)で5つすべてのVTY回線がビジーであることがわかりました。
VTY回線を解放するためにそこにぶら下がっていた古い接続をクリアしましたが、うまくいきました。コマンド「exec-timeout 15」をVTY行の下に追加しました。次に、コンソールケーブルを取り外しました。
レッスン:
すべてのデバイスで5〜10分のタイムアウトを設定してください(アクティビティが検出されない場合)。
私の場合、誤ってソケットプロキシが設定されていました(機能していません)。まったく同じssh -vvv出力と空のsshdログが表示されました。
最近作成されたコンテナーにrootユーザーでsshしようとすると、同様のエラーが発生しました。
ssh root@localhost -p 8022
ssh_exchange_identification: Connection closed by remote Host
# local port 8022 is redirected to container ssh port 22
どうやら、それはser(私の場合は「root」)パスワードがありませんでしたから発生しました。
ユーザーのパスワードを追加し、sshd(コンテナー内)を再起動したら:
echo 'root:<PASSWORD>' | Sudo chpasswd
Sudo service ssh restart
次に、コンテナーにSSH接続します。
CentOS Linux release 7.4.1708 (Core)
とOpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
を使用して、接続の背後にあるポートをフィルタリングしていない:
ssh_exchange_identification:リモートホストによって接続が閉じられました
そして、ラズベリーPiがオフになっていることがわかりました。
電源が入っていないホストでは「ホストへのルートがありません」というエラーが発生すると考えていました。 Raspberry PiがISPルーターの背後にあるため、おそらく接続を閉じていました。
次に、別のインターネット接続から実験を繰り返し(電源がオフになっているRaspberry Piへの接続を試みました)、Debian StretchでOpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017
を使用してポートをフィルタリングしていませんでしたが、今回は期待通りでした:
ホストへのルートがありません
エラーssh_exchange_identification: Connection closed by remote Host
は、いくつかの不明な理由で発生する可能性があります。 Visual Studio codeを使用していたとき。 git pull
コマンドを使用してリモートリポジトリからプルしようとしたときに、同じエラーが発生しました。
私は埋め込まれた端末を閉じたと開いた Ubuntuの端末をもう一度引っ張っただけです。そしてそれは成功しました