最近Fedora25にアップデートされ、openSSH7.4を実行しているマシンがあります。それ以来、ssh経由でのログインは 25〜30秒かかります 通常1秒以内で済むLAN上。
-vvv
を使用してクライアントを実行する 、公開鍵認証を使用すると、ここで一時停止が発生します。
debug1: Authentication succeeded (publickey).
Authenticated to crystalline.kodiak ([192.168.0.22]:127).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug3: send packet: type 90
debug1: Requesting [email protected]
debug3: send packet: type 80
debug1: Entering interactive session.
debug1: pledge: network
これは、同じネットワーク上の他の(Fedora 23、openSSH 7.2)マシンへの出力と同じように見えますが、問題はありません。
ログイン中にサーバー側でトップを監視、systemd
一時停止の開始時に、他のマシンでは目立たない何かが短時間(数秒)フレアします。その後、システムは完全にアイドル状態になります。同様に、クライアント側で異常なアクティビティはありません。
ログインしたら、すべて問題ありません。
Wiresharkを使用したクライアントからの交換を監視しましたが、一時停止中はパケットが交換されていません。クライアントとサーバーはルーターを介してイーサネット上にあるため、サーバーアドレスでトラフィックを監視することもできます。何も起こっていません。
これがsshd_config
です :
Port 127
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
IgnoreRhosts yes
SyslogFacility AUTHPRIV
LogLevel INFO
TCPKeepAlive yes
ClientAliveInterval 120
ClientAliveCountMax 15
PermitRootLogin yes
StrictModes yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no
UsePAM yes
X11Forwarding no
UsePrivilegeSeparation sandbox
AcceptEnv LANG LC_*
Subsystem sftp /usr/libexec/openssh/sftp-server
コメントでの佐藤桂の提案に従って、私はUseDNS no
で試しました;これは何の違いもありませんでした。
承認された回答:
これはかなりのコーナーケースであることがわかりました。
マシンはRaspberryPiであり、ストックPiカーネルを実行していますが、汎用のarmhfFedora25ユーザーランドを備えています。また、ヘッドレスでセットアップされ、他の方法で使用されることはありませんでしたが、モニターとキーボードに接続すると、systemd-logind.service
に明らかな問題が発生しました。 。昨年、systemdのコア部分がseccompに依存するようになったときに発生したこの問題にまでさかのぼります。これは、何らかの理由でストックPiカーネルに含まれていませんが、構成の誤りによって含まれているように見えます。
解決策はかなり単純でした。 seccompを必要とするサービスファイルオプションを削除する必要があります。 /usr/lib/systemd/system
にはこれらがいくつかあります 、systemd-logind.service
を含む 。
また、ストックシステムではネットワークが無効のままになる可能性がありますが、私はこれに独自のサービスを使用しており、影響を受けませんでした(つまり、他の誰かがこの問題に遭遇する可能性はわずかです)。
関連:正規表現文字として解釈されるように、sedの正規表現文字をエスケープする必要がありますか?とにかく、私はそれらすべての次の行をコメントアウトしました:
MemoryDenyWriteExecute=yes
SystemCallFilter=...
再起動しました。問題はありません。