SSHログインが遅いのはなぜですか?


95

SSHログインで遅延が発生しています。具体的には、瞬時から数秒の遅延までの範囲が見られる2つのスポットがあります。

  1. sshコマンドの発行とログインプロンプトの取得の間に
  2. パスフレーズを入力してからシェルをロードするまでの間

現在、具体的にはここでのみsshの詳細を調べています。明らかに、ネットワーク遅延、関連するハードウェアとOSの速度、複雑なログインスクリプトなどが遅延を引き起こす可能性があります。コンテキストについては、クライアントシステムとして主にUbuntu、CentOS、およびMacOS Xを使用する膨大な数のLinuxディストリビューションといくつかのSolarisホストにアクセスします。ほとんどの場合、sshサーバーの構成はOSのデフォルト設定から変更されていません。

どのsshサーバー構成に興味がありますか?調整できるOS /カーネルパラメーターはありますか?ログインシェルのトリック?等?


あなたはローカルアカウントを使用していますか?-時々私は、PAM認証は、SSHでログインに遅延を追加することができます見つける
Sirex

通常、ローカルアカウント。時々NIS。
ピーターライオンズ

回答:


122

in またはに設定UseDNSnoてみてください。/etc/sshd_config/etc/ssh/sshd_config


7
sshへのログイン時の遅延の最も一般的な原因である+1
matthias krull

2
「Solaris 11のメモ:Solaris 11でUseDNS no設定を試してみましたが、サービスの開始が破損しました。サービスによる正確な応答ではありません。YMMVと他の* Nixバリアントがあります。 」- キース・ホフマン
サティアジス・バート

3
IPアドレス(ホームLAN)を使用してログインするのに使用するのに懐疑的でしたが、この解決策で問題が解決しました。Googleのために、それは直後に発生しましたが、遅延は「key:/home/mylogin/.ssh/id_ecdsa((nil))」メッセージとは関係ありません(実行中ssh -vvv)。
スキッピールグラングロウ

2
明示的にするための+1、ファイル/etc/ssh/sshd_config!私は追加して/etc/sshd_config、まったく違いを見ていませんでした!!
vyom 14年

1
@SkippyleGrandGourou:一部のSolarisバージョンは、SunSSHと呼ばれる変更されたOpenSSHを使用していましたが、これにはいくつかの迷惑な非互換性がありました。Solarisの11.3は、OpenSSHの追加、移動SunSSHは最終的に削除されます...
ゲルトファンデンベルグ

37

私が走ったときssh -vvvと同様のパフォーマンスが低下して、サーバー上で私がここにハング見ました:

debug1: Next authentication method: gssapi-with-mic

/etc/ssh/ssh_configその認証方法を編集してコメントアウトすることで、ログインパフォーマンスを通常に戻しました。ここで私は私の中に持っているものだ/etc/ssh/ssh_configサーバー上:

GSSAPIAuthentication no

これはサーバー上でグローバルに設定できるため、認証のためにGSSAPIを受け入れません。サーバーに追加GSSAPIAuthentication no/etc/ssh/sshd_configて、サービスを再起動するだけです。


winbind / adログインが設定されると、RHEL5サーバーでこれが当てはまることがわかりました。
チャド

これは、Ubuntu 14.04サーバーで動作します。
eng河

CentOS 7では、ファイルGSSAPIAuthentication noとファイルの両方を設定する必要があります。UseDNS no/etc/ssh/sshd_config
サンリー

19

私にとって、犯人はIPv6解決であり、タイムアウトでした。(ホストプロバイダーのDNS設定が間違っていると思います。)を実行することでこれを発見しましたssh -v

解決策はssh、次の-4オプションを使用することです。

ssh -4 me@myserver.com


2
私たちの多くは、時間の経過とともに、物事が(ひどく)ゆっくりとIPV6に対応していくので、これを見ると思います。ありがとう!
セージ

1
...そして、この答えは、これが問題であることを確認するデバッグメッセージなしでは特に役に立ちません。
EP

SSHがデュアルスタックインターフェイスでリッスンしているときにこれが非常に一般的な問題であり、ログインできるときに最初に確認するのは私の経験ですが、予想よりも時間がかかります。
モグ16

IPv4にデフォルト設定するのではなく、IPv6を修正できる可能性はありますか?
msrd0

これがおそらくUseDNS no answerが機能する理由です。-vvvを使用するとdebug2: resolving "thing.net.au" port 22、エラーなしで一時停止のみが表示されますが、-4では発生せず、DNS IPv6の問題であることを示します。
PMC

16

systemdでは、アップグレード後にlogindとのdbus通信でログインがハングする場合があります。その後、loginddを再起動する必要があります

systemctl restart systemd-logind

Debian 8、Arch Linx、およびSUSEリストで見た


1
ああ、今それが犯人だった!本当にありがとう!
-mahatmanich

わたしも。DNSとSSHのすべての問題を最初に除外するのに時間がかかりました。注:問題が遅いsudoにも当てはまる場合は、まずこれを試してください。
マイケル

RHEL6からRHEL7へのインプレースアップグレードをいくつか終えたところ、この問題に気付きました。この答えは私の問題も修正しました。
user53029

本当にありがとう、それは魅力のように機能します。
ボーナム

9

現時点で何が行われているかを表示sshする-vオプションからいつでも開始できます。

$ ssh -v you@host

あなたが提供した情報では、いくつかのクライアント側の構成のみを提案できます。

  • パスワードを手動で入力していると書いているので、可能であれば公開鍵認証を使用することをお勧めします。これにより、速度のボトルネックが解消されます。

  • また、X転送-xおよび認証転送を無効にすることもできます-a(これらはデフォルトですでに無効になっている場合があります)。特にクライアントがsshコマンド用にXサーバーを起動する必要がある場合(OS Xの場合など)、X転送を無効にすると速度が大幅に向上します。

それ以外はすべて、どこで、いつどのような遅延が発生するかによって異なります。


冗長性についての良いヒントです。vを増やすことでそれを増やすこともできます。最大3つのIIRC。
vtest

7

2.のポイントに関して、サーバーを変更する必要もルート/管理者権限も必要としない回答があります。

次の「ユーザーssh_config」ファイルを編集する必要があります。

vi $HOME/.ssh/config

(注:存在しない場合は、$ HOME / .sshディレクトリを作成する必要があります)

そして追加:

Host *
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

必要に応じてホストごとに行うことができます:)例:

Host linux-srv
  HostName 192.158.1.1
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

IPアドレスがサーバーのIPと一致していることを確認してください。クールな利点の1つは、sshがこのサーバーのオートコンプリートを提供することです。だから、次のように入力することができますssh lin+ Tabとそれがオートコンプリートすべきですssh linux-srv


4

/etc/resolv.confサーバーでこのファイルにリストされているDNSサーバーが正常に動作することを確認し、機能していないDNSを削除します。

時にはそれは非常に役立ちます。


2

既に言及したDNSの問題に加えて、多くのNFSマウントを備えたサーバーにsshしている場合、quotaコマンドがnoquota。Solarisシステムでは、これをデフォルト/etc/profileで表示し、を実行してスキップできますtouch $HOME/.hushlogin


1

正常に動作します。

# uname -a
SunOS oi-san-01 5.11 oi_151a3 i86pc i386 i86pc Solaris
# ssh -V
Sun_SSH_1.5, SSH protocols 1.5/2.0, OpenSSL 0x009080ff
# echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
# echo "LookupClientHostnames no" >> /etc/ssh/sshd_config
# svcadm restart ssh

UseDNSはOpenIndianaでは機能しません。

すべてのオプションについては、「man sshd_config」をお読みください

サーバーが解決できない場合は、「LookupClientHostnames no」


1

上記の回答のいずれも機能せず、DNSの逆引きの問題に直面している場合は、nscd(ネームサービスキャッシュデーモン)がインストールされ実行されているかどうかも確認できます。

これが問題である場合は、DNSキャッシュがないため、ホストファイルにないホスト名を照会するたびに、キャッシュを調べる代わりにネームサーバーに質問を送信します

上記のすべてのオプションを試してみましたが、有効な変更は開始のみでしたnscd

また、/etc/nsswitch.confホストファイルを最初に使用するためにDNSクエリ解決を行う順序を確認する必要があります。


1

これはおそらくDebian / Ubuntu OpenSSHにのみ固有のものであり、Debianパッケージメンテナーの1人によって作成されたuser-group-modes.patchが含まれています。このパッチにより、ファイルと同じgidを持つユーザーが1人だけの場合、〜/ .sshファイルにグループ書き込み可能ビット(g + w)を設定できます。パッチのsecure_permissions()関数がこのチェックを行います。チェックのフェーズの1つは、getpwent()を使用して各passwdエントリを調べ、エントリのgidとファイルのgidを比較することです。

多くのエントリがあるシステムやNIS / LDAP認証が遅いシステムでは、このチェックは遅くなります。nscdはgetpwent()呼び出しをキャッシュしないため、サーバーがローカルでない場合、すべてのpasswdエントリがネットワーク経由で読み取られます。これを見つけたシステムでは、sshの呼び出しまたはシステムへのログインごとに約4秒が追加されました。

修正するには、〜/ .ssh内のすべてのファイルの書き込み可能ビットを削除しますchmod g-w ~/.ssh/*


1

systemd-logind.serviceを再起動すると、問題は数時間しか治らないことがわかりました。motshは表示されなくなりましたが、sshd_configでUsePAMをyesからnoに変更すると、高速ログインになりました。セキュリティ問題についてのコメントは?


私はここで他のすべての提案を行っていましたが、これは私のSamba4有効化サーバーの問題を修正した唯一のものです...ありがとう!
デベンフィリップス

警告:「UsePAM no」はRed Hat Enterprise Linuxではサポートされておらず、いくつかの問題を引き起こす可能性があります。
bbaassssiiee

1

DNS解決によりsshログインが遅くなる可能性があることを示すすべての回答を完了するには、ファイアウォールルールが欠落していることがあります。たとえば、デフォルトですべてのINPUTパケをドロップする場合

iptables -t filter -P INPUT DROP

その後、sshポートとDNSリクエストのINPUTを受け入れる必要があります

iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

1

ssh -vvv 少なくとも20秒間端末を取得しようとしてシステムにハングアップするまで、接続は本当にうまくいきました。

debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
... waiting ... waiting ... waiting

systemctl restart systemd-logind サーバーでを実行した後、再びインスタント接続ができました!

これはdebian8にありました!ここでsystemdが問題でした!

注: Bastien Durelはすでにこの問題に対する回答を提供していますが、デバッグ情報がありません。これが誰かに役立つことを願っています。


RHEL7(CentOS 7)でハングする「対話型セッションに入る」と同じ問題があり、でコメントアウトすることで解決しsession [default=1] pam_lastlog.so nowtmp showfailedました/etc/pam.d/postlogin。どうやら、lastlogファイルの更新は、コンテナーベースのOpenVZ VPSで非常に遅くなりました。
ジャスティン

1

最近、遅いsshログインの別の原因を見つけました。

あなたが持っていたとしてもUseDNS no/etc/sshd_configあれば、sshdがまだDNSの逆引きを行うことができる/etc/hosts.denyようなエントリがあります。

nnn-nnn-nnn-nnn.rev.some.domain.com

これは、システムにDenyHostsがインストールされている場合に発生する可能性があります。

誰かがこの種のエントリをに入れないようにDenyHostsを作成する方法を知っていたら素晴らしいでしょう/etc/hosts.deny

エントリを削除する方法については、DenyHosts FAQへのリンクがあります-DenyHostsがブロックしたIPアドレスを削除するに/etc/hosts.denyどうすればよいですかを参照してください


1

優先される名前解決方法は、ホストファイルではなくDNSであることがわかります。

たとえば、これは通常の構成です。

[root@LINUX1 ~]# cat /etc/nsswitch.conf|grep hosts
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

最初に、hostsファイル(オプション:ファイル)に到達し、次にDNS(オプション:dns)に到達しますが、別の名前解決システムが追加されており、動作していないため、逆解決の試行が遅くなっています。

名前解決の順序が正しくない場合は、次の場所で変更できます。 /etc/nsswitch.conf

抽出元:http : //www.sysadmit.com/2017/07/linux-ssh-login-lento.html


1

私はすべての答えを試しましたが、どれもうまくいきませんでした。最後に私の問題を見つけます:

最初に実行しsudo tail -f /var/log/auth.log てsshのログを表示できるようにし、別のセッションで実行ssh 172.16.111.166して待機していることに気づいた

/usr/bin/sss_ssh_knownhostsproxy -p 22 172.16.111.166

検索後、この行を/ etc / ssd / ssh_configに配置しました

ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h

私はそれをコメントし、遅延はなくなった


1

注:これは「デバッグ方法」のチュートリアルとして始まりましたが、Ubuntu 16.04 LTSサーバーで私を助けたソリューションになりました。

TLDR:実行してlandscape-sysinfo、コマンドの終了に時間がかかるかどうかを確認します。新しいSSHログインでのシステム情報の印刷です。このコマンドはすべてのシステムで使用できるわけではなく、landscape-commonパッケージによってインストールされることに注意してください。(「待ってください、もっとあります...」)


問題のあるマシンの別のポートで2番目のsshサーバーを起動し、デバッグモードで実行します。これにより、フォークは行われず、デバッグメッセージが出力されます。

sudo /usr/sbin/sshd -ddd -p 44321

詳細モードで別のマシンからそのサーバーに接続します。

ssh -vvv -p 44321 username@server

クライアントは、スリープを開始する直前に次の行を出力します。

debug1: Entering interactive session.
debug1: pledge: network

グーグルはあまり役に立ちませんが、サーバーログの方が優れています。

debug3: mm_send_keystate: Finished sending state [preauth]
debug1: monitor_read_log: child log fd closed
debug1: PAM: establishing credentials
debug3: PAM: opening session
---- Pauses here ----
debug3: PAM: sshpam_store_conv called with 1 messages
User child is on pid 28051

に変更UsePAM yesするとUsePAM no、この問題は解決したことに気付きました。

UseDNS他の設定とは関係なくUsePAM、システムのこの問題にのみ影響します。

私はなぜ見当がつかない、と私も残していないよUsePAMno、私は副作用であるかを知らないので、これは私が調査を継続することができます。

したがって、これを答えと考えないでください。しかし、何が悪いのかを知るための最初のステップです。


そこで調査を続け、()で走りsshdました。これにより、次の結果が得られました。stracesudo strace /usr/sbin/sshd -ddd -p 44321

sendto(4, "<87>Nov 20 20:35:21 sshd[2234]: "..., 110, MSG_NOSIGNAL, NULL, 0) = 110
close(5)                                = 0
stat("/etc/update-motd.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
umask(022)                              = 02
rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0x7ffde6152d2c) = 2385
wait4(2385, # BLOCKS RIGHT HERE, BEFORE THE REST IS PRINTED OUT # [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 2385

/etc/update-motd.dは私を疑わしくしました、どうやらプロセスは中にあるものの結果を待っています/etc/update-motd.d

だから私はcd「の研究開発/etc/update-motd.dと走っsudo chmod -x *これは、動的生成するすべてのファイルを実行するためにPAMを抑制するためにMessage Of The Day、パッケージをアップグレードする必要があり、これで問題が解決した場合、システムの負荷が含まれており、。

これは、「エネルギー効率の高い」N3150 CPUに基づいたサーバーであり、24時間年中無休で多くの作業を行う必要があるため、このmotdデータをすべて収集するのは多すぎると思います。

そのフォルダ内のスクリプトを選択的に有効にし、どれがそれほど有害ではないかを確認し始めるかもしれませんが、特別な呼び出しlandscape-sysinfoは非常に遅く、50-landscape-sysinfoそのコマンドを呼び出します。それが最大の遅延の原因だと思います。

ほとんどのファイルを再度有効にした後、50-landscape-sysinfoそれ99-esmが私のトラブルの原因であるという結論に達しました 。50-landscape-sysinfo実行に約5秒、99-esm約3秒かかりました。残りのすべてのファイルは、全体で約2秒です。

どちらも重要50-landscape-sysinfo99-esmはありません。50-landscape-sysinfo興味深いシステムの統計情報(およびスペースが不足している場合も!)を99-esm出力し、関連するメッセージを出力しますUbuntu Extended Security Maintenance

最後にecho '/usr/bin/landscape-sysinfo' > info.sh && chmod +x info.sh、リクエストでスクリプトを作成し、リクエストに応じてそのプリントアウトを取得できます。


1

このスレッドは既に多数のソリューションを提供していますが、ここでは説明していません=)。だからここにある。私の問題(raspberry piへのsshログインに約1分かかりました)は、破損した.bash_historyファイルが原因でした。ファイルはログイン時に読み取られるため、これによりログインの遅延が発生していました。ファイルを削除すると、ログイン時間は瞬時のように通常に戻りました。

これが他の人々の助けになることを願っています。


0

私にはGSSAPIが必要でしたが、逆DNSルックアップをオフにしたくありませんでした。それは良いアイデアとは思えなかったので、resolv.confのメインページをチェックアウトしました。私とSSH接続先のサーバーとの間のファイアウォールは、DNSリクエストを妨害していることがわかりました。なぜなら、それらはファイアウォールが期待する形式ではなかったからです。最終的に、私がする必要があるのは、この行を追加して、SSHを送信するサーバーのresolv.confに追加することだけでした。

options single-request-reopen


0

驚くべきことに、CentOS 7でのバインドのパッケージ更新によりnamedが破損し、ログに/etc/named.confにパーミッションの問題があったことが示されました。これは、0640で数か月間うまく機能していました。今では0644が必要です。これは、namedデーモンが「named」ユーザーに属するため、理にかなっています。

sshログインからローカルWebサーバーからのページ提供、LAMPアプリの停滞など、すべての名前が下がっていたため、すべてのリクエストは、構成されている外部のセカンダリDNSを検索する前に、死んだローカルサーバーでタイムアウトする可能性があります。


0

私にとっては、ローカル/etc/hostsファイルに問題がありました。したがってssh、タイムアウトに永遠にかかった2つの異なるIP(1つは間違っています)を試していました。

ssh -vここで使用したトリック:

$ ssh -vvv remotesrv
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /home/mathieu/.ssh/config
debug1: /home/mathieu/.ssh/config line 60: Applying options for remotesrv
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to remotesrv [192.168.0.10] port 22.
debug1: connect to address 192.168.0.10 port 22: Connection timed out
debug1: Connecting to remotesrv [192.168.0.26] port 22.
debug1: Connection established.

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