HPN-SSHによりscpで非暗号化転送を可能にして高速化する

スポンサーリンク

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://www.psc.edu/hpn-ssh

パッチは次の所から入手できます。
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倍高速になりました。


コメント

タイトルとURLをコピーしました