Home / ssh ログインが遅い

FMV-6266NU3/W + Vine 4.2 でのお遊び調査

ssh ログインが遅くなった

(2015-9-4) 速いと感じていた ssh パスワードログインだが、samba でどんどんファイル格納したり、不要サービスをOffにしたり、と弄っていいる内に速いと思えなくなった。
ファイルサイズ/数の増加位しか身に覚えが無いのだけれど、既に大量のファイルを移動してしまった為容易に確かめられなくなってしまった。

しかしながらこういった、古くて性能が低い物だけに、何かに付けて影響が現れるので勉強にとても良い。捨てずに良かった…

さて、勉強がてら調査しよう。
と言っても SSH については明るくない。手始めに /etc/ssh/sshd_config の StrictModes、及び UseDNS を no に変えてみたが大して変わらず。むぅ~

# grep '^[^#]' /etc/ssh/sshd_config
Protocol 2
SyslogFacility AUTHPRIV
PermitRootLogin no
StrictModes no
PasswordAuthentication yes
ChallengeResponseAuthentication no
X11Forwarding yes
UseDNS no
Subsystem sftp /usr/libexec/openssh/sftp-server

キャプチャして見るか… SSH login slow
samba の SMB は特に関係無さそう。
#14032 サーバーからの xxx Reply がとても遅い。

流れが良く判らないので、 「Cryptography of SSH」http://www.mnin.org/write/2006_sshcrypto.html#part7
のシーケンス図を参考にそれなりに整形。

No.   Time             Protocol Info
12444 227.986453 <-- SSHv2 Server Protocol: SSH-2.0-OpenSSH_4.5
12445 227.987150 SSHv2 Client Protocol: SSH-2.0-TTSSH/2.72 Win32\r
12470 228.029583 <-- SSHv2 Server: Key Exchange Init
12503 228.365912 SSHv2 Client: Key Exchange Init
12505 228.366725 SSHv2 Client: Diffie-Hellman GEX Request
12507 228.718886 <-- SSHv2 Server: Diffie-Hellman Key Exchange Reply
12509 228.890580 SSHv2 Client: Diffie-Hellman GEX Init
14032 256.558469 <-- SSHv2 Server: Diffie-Hellman GEX Reply
14034 256.717430 SSHv2 Client: New Keys
14036 256.719509 SSHv2 Encrypted request packet len=52
14038 256.723564 <-- SSHv2 Encrypted response packet len=52

手順に悪い処は無さそうだ。だが、事前に VirtualBox でインストールしたもので同様に見ると 500msec 程で返している。ホストマシンの性能が高いせいもあるが…

kex_order 処で Diffie-Hellman とは鍵交換アルゴリズムだそうで、TeraTerm の設定に有った。

これら4つを使用せぬよう下げてみると…ログイン不可能。
優先度低いながらも適用されていたんだからね、当然か。


CPU負荷に注目する:topコマンド(1秒毎)で見るとやはり負荷が高い(pid 1646)。落ち着くまで30秒近く要している。

top - 13:25:44 ...
1645 root 16 0 4796 1520 1236 S 33.4 1.0 0:00.80 sshd
1646 sshd 16 0 4796 992 676 R 19.2 0.6 0:00.23 sshd
...
top - 13:25:49 ...
1646 sshd 22 0 4796 992 676 R 82.2 0.6 0:04.19 sshd
...
top - 13:26:15 ...
1646 sshd 25 0 4796 1016 692 S 0.0 0.6 0:23.68 sshd

う~ん、妥当なんだろうか? インストール直後に早かったのは何故なんだろう…


ここで 話しそれて TeraTerm 設定ファイルの異様に気付く。v.4.86
先の図の設定でこうなってる(コメントは最初から付けられていたと思うのだが…)。

; KEX algorithm order(SSH2)
;  0...diffie-hellman-group1-sha1
;  1...diffie-hellman-group14-sha1
;  2...diffie-hellman-group-exchange-sha1
;  3...diffie-hellman-group-exchange-sha256
;  4...ecdh-sha2-nistp256
;  5...ecdh-sha2-nistp384
;  6...ecdh-sha2-nistp521
;  7...KEXs below this line are disabled.
KexOrder=56743210

普通なら KexOrder=45632107 と考えるんだけども…
ちょっと弄って設定ファイル書き出し変化を見た処、コメントの値がずれているようだ。
正しくは(少なくとも ListBox の文字列と合わせるには)次の通り。

; KEX algorithm order(SSH2)
;  0...KEXs below this line are disabled.
;  1...diffie-hellman-group1-sha1
;  2...diffie-hellman-group14-sha1
;  3...diffie-hellman-group-exchange-sha1
;  4...diffie-hellman-group-exchange-sha256
;  5...ecdh-sha2-nistp256
;  6...ecdh-sha2-nistp384
;  7...ecdh-sha2-nistp521
KexOrder=56743210

さて、アルゴリズム指定方法が判ったので、ログイン時間を比較すべく次のように4つ用意しておき、1つずつ有効にしながら簡易時間測定する。

;KexOrder=10234567
;KexOrder=20134567
;KexOrder=30124567
;KexOrder=40123567

2回ずつ測定してみて、ほぼ同じ次の時間。やはり性能なのだろうか…

1...diffie-hellman-group1-sha1 -------------  7sec
2...diffie-hellman-group14-sha1 ------------ 11sec
3...diffie-hellman-group-exchange-sha1 ----- 30sec
4...diffie-hellman-group-exchange-sha256 --- 30sec

SSH バージョン1 を許可するよう "Protocol 2,1" へ変え、TeraTerm も指定変更。
気持ち分、diffie-hellman-group1-sha1 より速い気がするが、それでも 7sec 位。

telnetサービス

セキュリティは二の次、ログインが遅くては不便なので telnet server を活かす。

$ wget http://updates.vinelinux.org/apt/4.2/i386/RPMS.main/telnet-server-0.17.x-30vl2.i386.rpm
--16:05:38-- http://updates.vinelinux.org/apt/4.2/i386/RPMS.main/telnet-server-0.17.x-30vl2.i386.rpm
=> `telnet-server-0.17.x-30vl2.i386.rpm'
updates.vinelinux.org をDNSに問いあわせています... 133.1.84.71
updates.vinelinux.org|133.1.84.71|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 28,972 (28K) [application/x-redhat-package-manager]

100%[=====================================================>] 28,972 --.--K/s

16:05:38 (1.93 MB/s) - `telnet-server-0.17.x-30vl2.i386.rpm' を保存しました [28972/28972]
# rpm -ivh telnet-server-0.17.x-30vl2.i386.rpm
エラー: 依存性の欠如:
inetd は telnet-server-0.17.x-30vl2.i386 に必要とされています
# apt-get update
取得:1 http://updates.vinelinux.org 4.2/i386 release [2262B]
2262B を 2s 秒で取得しました (885B/s)
取得:1 http://updates.vinelinux.org 4.2/i386/main pkglist [287kB]
取得:2 http://updates.vinelinux.org 4.2/i386/main release [158B]
取得:3 http://updates.vinelinux.org 4.2/i386/plus pkglist [513kB]
取得:4 http://updates.vinelinux.org 4.2/i386/plus release [166B]
取得:5 http://updates.vinelinux.org 4.2/i386/updates pkglist [252kB]
取得:6 http://updates.vinelinux.org 4.2/i386/updates release [171B]
取得:7 http://updates.vinelinux.org 4.2/i386/nonfree pkglist [21.6kB]
取得:8 http://updates.vinelinux.org 4.2/i386/nonfree release [169B]
取得:9 http://updates.vinelinux.org 4.2/i386/main srclist [119kB]
取得:10 http://updates.vinelinux.org 4.2/i386/plus srclist [222kB]
取得:11 http://updates.vinelinux.org 4.2/i386/updates srclist [52.7kB]
取得:12 http://updates.vinelinux.org 4.2/i386/nonfree srclist [20.4kB]
1488kB を 1m17s 秒で取得しました (19.1kB/s)
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
# apt-cache search telnet
...
telnet - リモートログインプロトコル telnet のクライアントプログラム
telnet-server - リモートログインプロトコル telnet サーバトプログラム
...
# apt-get install telnet-server
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下の追加パッケージがインストールされます:
inetd
以下のパッケージが新たにインストールされます:
inetd telnet-server
アップグレード: 0 個, 新規インストール: 2 個, 削除: 0 個, 保留: 81 個
58.2kB のアーカイブを取得する必要があります。
展開後に 73.8kB のディスク容量が追加消費されます。
続行しますか? [Y/n]y
取得:1 http://updates.vinelinux.org 4.2/i386/plus inetd 0.17-0vl4 [29.2kB]
取得:2 http://updates.vinelinux.org 4.2/i386/main telnet-server 0.17.x-30vl2 [29.0kB]
58.2kB を 0s 秒で取得しました (81.4kB/s)
変更を適用しています...
準備中... ########################################### [100%]
1:inetd ########################################### [ 50%]
2:telnet-server ########################################### [100%]
完了
# chkconfig --list inet
inet 0:off 1:off 2:off 3:on 4:on 5:on 6:off

telnet を活かす。

# vi /etc/inetd.conf
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
# /etc/init.d/inet restart
Stopping INET services: [ 失敗 ]
Starting INET services: [ OK ]

これで TeraTerm マクロで爆速ログイン!

Vine Linux 4.2 (Lynch Bages)
Kernel 2.6.16-0vl76.27 on an i686
login: xxxxx
Password:
Last login: Sun Sep 27 14:08:32 from x.x.x.x
[xxx@xxx xxx]$

TeraTerm マクロ

殆ど付属サンプルまんまだが、telent での自動ログインマクロ。

;============================================== 
;; 接続先サーバ・ユーザ名・パスワード設定 
HOSTADDR = 'hoge' 
USERNAME = 'foo' 
PASSWORD = '********' 
;============================================== 
;; ①コマンド組立て 
COMMAND = HOSTADDR 
strconcat COMMAND ':23 /nossh /T=1'
 
;; ②サーバ接続 
connect COMMAND
 
;; ③ログイン情報応答(ユーザ名・パスワード) 
wait 'login:' 
sendln USERNAME 
wait 'Password:' 
sendln PASSWORD
 
;; ④マクロ終了 
end

ズボラでシャットダウンマクロも拵える。
④マクロ終了 の前に次を挿入。

sendln 'LANG=C su -'
wait 'Password:' 
sendln PASSWORD
wait '#'
sendln 'shutdown -h now'

これ等をショートカットしておけば一発!
リンク先:
...\TeraTermPro\logout.ttl
作業フォルダ:
...\TeraTermPro


Home / ssh ログインが遅い


c 2008 usskim    http://usskim.web.fc2.com/
inserted by FC2 system