ssh/scp を高速化する HPN-SSH の機能の1つ、非暗号化転送によって scp転送を高速化する方法を紹介します。
こちらのLinux環境では64MBのファイル転送で1.3倍、512MBで1.1倍に速度向上しました。
sshしかポートが開いていなくとも、LAN内のファイル転送のように暗号化にそれほど気を使わない場合に高速化できます。
HPN-SSHとは
High Performance SSH/SCP(以下HPN-SSH)は、Pittsburgh Supercomputing Center で開発された ssh/scp を高速化する openssh用パッチです。
パッチは次の所から入手できます。
https://sourceforge.net/projects/hpnssh/files/HPN-SSH%2014v13%207.5p1/
openssh に HPN-SSH のパッチを適用したものが次の個所で公開されています。
https://github.com/rapier1/openssh-portable/
使用方法は次の個所です。
https://github.com/rapier1/openssh-portable/blob/master/HPN-README
非暗号化によるファイル転送
ssh/scpでは、暗号化方式を指定できます。
scpのWindows版の実装 WinSCP でも同様で、下記記事のように暗号化方式を指定でき、その暗号化方式により転送速度も違ってきます。
WinSCPの暗号化方式による転送速度の違い パソコン鳥のブログ
HPN-SSH の機能の1つに、暗号化方式に「非暗号化」を選択できるものがあります。
先述したパッチ(https://github.com/rapier1/openssh-portable/)の中で NoneSwitch がその機能のパッチです。
「非暗号化」により、暗号化処理を行わないのでファイル転送が速くなります。
なお、認証にかかる処理は通常のscpと同様暗号化されていますので安全です。
scpでNoneSwitchオプション指定時に、認証完了後のデータ転送から「非暗号化」が行われます。
https://github.com/rapier1/openssh-portable/blob/master/HPN-README
NoneSwitch=[yes/no] client
Switch the encryption cipher being used to the None cipher after authentication takes place.
HPN-SSH のインストール
まず、必要なパッケージをインストールします。
CentOS
yum install zlib-devel yum install openssl-devel yum install pam-devel
Ubuntu
apt-get install zlib1g-dev apt-get install libssl-dev apt-get install libpam0g-dev
下記手順で必要ファイルを取得・ビルドします。
wget https://ftp.yzu.edu.tw/pub/OpenBSD/OpenSSH/portable/openssh-7.5p1.tar.gz tar zxvf openssh-7.5p1.tar.gz wget https://github.com/rapier1/openssh-portable/archive/master.zip unzip master.zip cd openssh-portable-master/ cp ../openssh-7.5p1/configure . cp ../openssh-7.5p1/config.h.in . ./configure --prefix=/opt/hpn-ssh --with-pid-dir=/opt/hpn-ssh/var/run/ --with-pam make
インストールします。
rootで実行します。
mkdir -p /opt/hpn-ssh/var/run/ make install
今回インストールする HPN-SSH の sshd_config を編集し、OSに既にインストールされている既存の sshd とポート番号が競合しないようにします。
ここでは 20022番ポートにします。
また、NoneEnabled オプションを yes にして 非暗号化転送を有効にします。
/opt/hpn-ssh/etc/sshd_config
Port 20022 NoneEnabled yes
20022番ポートで接続可能なようにファイアウォールを設定します。
例えばCentOS7では、次のようにします。
firewall-cmd --add-port=20022/tcp --zone=public --permanent firewall-cmd --reload
起動します。
/opt/hpn-ssh/sbin/sshd
使用方法
暗号化方式に「非暗号化」を指定するには、通常の scpコマンドの書式に加えて、-oNoneEnabled=yes -oNoneSwitch=yes オプションを付加します。
次のような書式で実行します。今回の例では使用ポート番号は 20022 です。
….以降は、通常のscpと同じように、コピー元/先を指定します。
/opt/hpn-ssh/sbin/scp -oNoneEnabled=yes -oNoneSwitch=yes -P 20022 ....
性能測定
64MB と 512MB のファイル転送速度を、OS標準のSCPと、今回紹介の HPN-SSH の SCP(暗号化方式に「非暗号化」) とで比較します。
ファイル転送の転送時間を3回測定した平均です。
64MBの場合
OS標準のSCP:1.85秒(34.6MB/s)
HPN-SSH の SCP:1.41秒(45.4MB/s)
約1.3倍高速になりました。
512MBの場合
OS標準のSCP:14.59秒(35.1MB/s)
HPN-SSH の SCP:13.08秒(39.1MB/s)
約1.1倍高速になりました。
コメント