ssh接続の開始には永遠に時間がかかり、「pledge:network」にとどまります


44

sshを使用して私のサーバーの1つに接続するのに20秒以上かかります。

これはLANまたはWANの状態とは関係ありません。それ自体への接続も同じ(ssh localhost)を使用するためです。接続が最終的に確立された後、サーバーとのインターラクトは非常に高速です。

-vvvを使用すると、「pledge:network」と言った後に接続が停止していることがわかります。この時点で、ここに表示されているように、認証(ここではキーを使用)は既に行われています:

...
debug1: Authentication succeeded (publickey).
Authenticated to myserver.mydomain.com ([xx.xx.xx.xx]:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network

(...ここで15〜25秒間スタックします...)

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug2: client_session2_setup: id 0
...

サーバーはUbuntu 16.04です。過去に別のサーバー(Ubuntu 12.04だった)で既に起こっていた、神経質な人が解決策を見つけ、しばらくして問題が消えてしまった...

sshd_configは、Ubuntuが提供するデフォルトの設定です。

これまで私は試しました:

  • sshコマンドで-o GSSAPIAuthentication = noを使用
  • キーの代わりにパスワードを使用する
  • sshd_configで、yesではなくUsePrivilegeSeparation noを使用します。

1
通常、私にとってSSH接続が遅いのはDNSの問題です。それはここにあるのでしょうか?例えば、サーバはクライアントのIPのリバースDNSをしようと外に時間にそれを待って貼り付けてもよい
エリックRenouf

実際にはno:デフォルトではUseDNSはsshd_configで定義されておらず、manページにはこのオプションはデフォルトで「no」と書かれています。
Mジャック

3
一部のグーグルは、これはリブートせずにsystemdを更新することによって引き起こされる可能性があると示唆しています。また、7月12日にxenialのsystemdアップデートがありました。 systemctl restart systemd-logind私のために短期間だけ問題を修正します。
イヴァンコジック

またはpam_systemd(sshd:session): Failed to create session: Connection timed out、答えに記載されているように表示されている場合、これはgithub.com/systemd/systemd/issues/2925
Ivan Kozik

更新後にこの問題が発生したためにここに来ました。@ IvanKozikの提案により問題が修正されました。つまり、systemctl restart systemd-logindです。
ポールM

回答:


43

これはおそらく問題ですD-Bussystemddbus何らかの理由でサービスが再起動された場合は、再起動する必要もありますsystemd-logind

これが問題であるかどうかを確認するには、sshデーモンログを開き(Ubuntuでは/var/log/auth.log)、次の行があるかどうかを確認します。

sshd[2721]: pam_systemd(sshd:session): Failed to create session: Connection timed out

はいの場合、systemd-logindサービスを再起動します。

systemctl restart systemd-logind

CentOS 7でも同じ問題messagebusが発生しました(D-BusCentOSでサービスが呼び出される方法)。


systemd-logindを再起動しようとしましたが、しばらくするとPolicyKitデーモンがバスから切断されたと表示されます。登録済みの認証エージェントではなくなりました。タイムアウトを超えたため、systemd-logind.serviceのジョブが失敗しました。詳細については、「systemctl status systemd-logind.service」および「journalctl -xe」を参照してください。
くんれん

@KunRenでは、おそらくpolkitを使用してサービスを再起動する必要がありますsystemctl restart polkit
Strahinja Kustudic

16

答えを見つけました:

sshd_configファイルのUsePAMをyesからnoに変更

sshサービスを再起動すると、サーバーへの接続がすぐに開始されます。このサーバーでは、PAMはldapにリンクされているため、LDAPでなくサーバー自体で宣言されたユーザーと接続している場合でも、おそらくこれが理由です。

まあ、これは問題を回避するための方法であり、実際の解決策ではありません...この問題を抱えていない同じ方法で他のサーバーをセットアップしています。

これが誰かを助けることを願っています...


1
UsePAMをnoに変更すると、他の効果があります。参照してください。この議論 のアカウントがロックされているので、私は許可されていないユーザーのnagiosのようなエラーを得たのでだから私は、ユーザーにパスワードを設定する必要がありました
M-ジャック

4
これは本当に良い考えではありません。
-Jakuje

1
なぜ ??代替案はありますか?
Mジャック

8
PAMは、現代のシステムでのアカウント管理に関する他のものに使用されます。これをオフにするよりも、PAMスタックで何が起こっているのか、なぜそれほど時間がかかるのかを調査する方が良いでしょう。
Jakuje

非常に一般的に使用されていないPAMモジュールをSSHアクセス用に有効にしておくと、セキュリティホールになります。セキュリティの観点からSSHなどの重要なサービスへのアクセスを制限することは、他のサービスでも常に良い考えです。PAMモジュールをSSHと連携させたい場合 たとえば、winbindを介してActive Directoryと統合する必要がある場合、googleトークンなどを使用した2要素認証が必要な場合など。他の場合(passwdとshadowを使用する場合)、完全に安全です。PAMのすべてのユーザーはこれを見るものとします:cve.mitre.org/cgi-bin/cvekey.cgi
Michal Sokolowski

10

これは、Fedora 25サーバーのうち2台で発生しました。これは、SSHログインの試行が何度も失敗したためです。

GSSAPIAuthentication=noand を使用するUseDNS=no、または再起動するという一般的な提案はsystemd-logind違いはありませんでした。)

これらのサーバーに/etc/pam.d/postloginは、次のものが含まれます。

session     optional      pam_lastlog.so silent noupdate showfailed

のmanページでpam_lastlogは、showfailedオプションが次のことを行うことが説明されています。

ログインに失敗した回数と、btmpから最後に失敗した試行の日付を表示します。

これらのサーバーでは、/var/log/btmp多くのログイン試行が失敗したため、ファイルは膨大でした。btmpログファイルは、どちらかに回転されていませんでした。

logrotateパッケージをインストールして、今後ログファイルがローテーションされるようにしました。(Fedoraでは、に付属する構成logrotateがの回転を処理し/var/log/btmpます。)

また、膨大なbtmpログファイルも削除しました。これを行うとすぐに、サーバーへの接続が再び瞬時になりました。


これで問題が解決しました!ありがとうございました。ナイスキャッチ。SSHは5〜10秒かかっていましたが、今では瞬く間に過ぎません。これは、私が長年にわたってパブリックインターネットに接続していたVM上にあります。私の考えでは、ファイアウォールのルールはおそらく少し良く調整できるでしょう。他の人にとっては、これが私がしたことのすべてですsudo truncate -s 0 /var/log/btmp。-私のサイズは2.7Gでした。
カールベネット

2

私の場合、理由はクラッシュしたrsyslogdでした。これは、たとえば/ var / log / syslogや/var/log/mail.logにログメッセージがなくなったために見つかりました。

そこでservice rsyslog restart問題を解決しました。


CentOS 6.10を実行しているサーバーでも同じ原因が発生します。rsyslogの再起動が面倒を見てくれました。事は、それは死んでいなかったということです。それは実行されていましたが、明らかに何の役にも立ちませんでした。
ユタジャーヘッド

1

私にとって、この問題は大きなbtmpファイル(数百MB)が原因です。このファイルはログイン試行を記録します。人々がパスワードをブルートフォースしようとすると、このファイルは大きくなり、"pledge: network"フェーズが遅れる可能性があります。

ログファイルをクリアしてみてください

echo "" > /var/log/btmp

それが役立つかどうかを確認します。


3
これにはさらに多くの説明が必要です。まず、なぜこれが役立つと思いますか?
スヴェン

ヒント:入力するだけで同じことが行われます:> /var/log/btmp
マリウス

1

私にとって解決策は

UseDNS no

/etc/ssh/sshd_configして、もちろんservice ssh restart(私たちはDebian /ジェシー・サーバ上)。他に何もない...

ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 13.440 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 20.990 total
ssh git@git.*****.de true  0.03s user 0.02s system 0% cpu 31.114 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 25.898 total

ssh git@git.*****.de true  0.03s user 0.02s system 5% cpu 0.832 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.523 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.574 total

いいえ、追加UseDNS noは完全に異なる問題の解決策です。
カスペルド

@kasperd関係ありません。私の場合、私はまったく同じ症状を抱えていました(簡単に言うと、「誓約:ネットワーク」と言った後に立ち往生しています)、これが最終的に助けたものですので、これは少なくとも非常に類似した問題の解決策であり、1つまたはある時点でその他。
タマスガル

ここでは同じ、接続中に2つのハング、次々sign_and_send_pubkey、後に長い1 pledge: network。ここで古いUbuntu 14.04.5 LTSインストールで問題を解決したのは、UseDNS noその後の追加のみservice ssh restartです。
ハウンド

0

デバッグフィードバックに次の行があることに気付きました。

Control socket connect(/var/lib/jenkins/.ssh/USER@HOST:22): Permission denied

これはroot:root私が所有しているファイルですjenkins。このファイルを削除すると問題が解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.