libssh2をコンパイルしてみた


暗号化通信に興味が出たので、libssh2の使い方を調べてみることにしました。

libssh2のリポジトリと、付属のサンプル

libssh2が使えるようになれば、自作アプリケーションにssh2による暗号化通信を組み込めるかもしれないと考えています。
sshポートフォワーディングのような使われ方もしていますので、バイナリ送受信はできるわけですし。

実行環境はUbuntu 13.04 amd64です。

libssh2の入手とコンパイル


公式サイトからリポジトリの情報ページまで行ってGitリポジトリのURLを見つけました。
作業ディレクトリを作成し、その中でリポジトリを取得します。
 git clone git://git.libssh2.org/libssh2.git

取得したlibssh2の中にcdでディレクトリ移動して入ります。
最初にconfigureを作成。
./buildconf

configureを実行。
インストール先を指定したかったので、今回は--prefixオプションを付与しています。
(ソースのひとつ上のディレクトリをインストール先に指定。)
./configure --prefix=$(dirname $(pwd))

実行の際、ライブラリが無いことを怒られるので、
sudo apt-get install libssl-dev libxcrypt-dev -y

として、SSLなどのライブラリを導入します。
Makefileができているはずなので、コンパイルします。
make
make install


エラーがでなければ成功です。
ls ..
すれば、make install前には無かった include lib share のディレクトリが出来ていることが確認できるはずです。



サンプルの実行テスト

ソースのディレクトリの中にexampleディレクトリがあります。
その中には、大量のサンプルソースとMakefileが入っているはずです。
サンプルはmakeするまでもなく、ソースと共にビルドされています。

サンプルの実行テストを行うには、SSHで接続可能なユーザが必要となります。
つまり.sshの下にid_rsaid_rsa.pubが配置されたテスト用ユーザを作る必要があります。
(テストなので、自分で自分にSSH接続します。)

#sshサーバのインストール
sudo apt-get install openssh-server -y

#ユーザを作成
sudo useradd -m sshtest
sudo passwd sshtest
#ユーザにSSHキー(publicと秘密鍵) を生成して配置。実験用なのでパスフレーズはなし。
#(ssh-keygenで入力せずエンター。)
su sshtest
cd
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
#(ソースのexampleまでcd)
#実行
./ssh2


実行すると、以下のような結果が表示されます。
(XXは実際のフィンガープリントになります)
Fingerprint:  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
Authentication methods: publickey,password
    Authentication by password failed!
all done!

とりあえず、ユーザ名&パスワードが正しくないというエラーまで。


引数にユーザ名とパスワードを与えます。


./ssh2 127.0.0.1 sshuser-username sshuser-password
以下のような結果が表示されます。
Fingerprint:  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
Authentication methods: publickey,password
    Authentication by password succeeded.
all done!

成功したようです。自分で自分に繋げているだけですが。

サンプルのうち、ssh2.cはログインテストでした。
ssh2_exec.cはssh経由のコマンド実行ができるようです。
その他のサンプルは、必要になったらソースを読みつつ試してみようと思います。

SSHを組み込んだプログラムのコンパイルへ

コンパイルオプションにsshライブラリを指定するために、pkg-configを設定します。
そのためには、PKG_CONFIG_PATHに、sshライブラリのpkg-config設定ファイルを格納したディレクトリへのパスを指定する必要があります。
libsshの設定ファイルであるlibssh.pcは、コンパイルして生成したlibディレクトリの下、lib/pigconfig/libssh.pcに存在します。
export PKG_CONFIG_PATH=
"$(dirname $(pwd))/lib/pkgconfig/:${PKG_CONFIG_PATH}"
(実際は1行のコマンドです。
このあたりで複雑なパス指定にしてしまったことを若干後悔しはじめる。)
下記のコマンドを打って、絶対パスが入っていることを確かめます。
env | grep -i pkg

さらにpkg-configを打ってみて、includeとlibのパスが出力されることを確かめます。
pkg-config --cflags --libs libssh2


出力されるpkg-configのオプションを、ビルド時にgccへ与えれば、libsshを組み込んだプログラムをコンパイルすることができます。

このブログの人気の投稿

GIMP2.8でイラストにペン入れを行う

squid3プロキシサーバの設定(Ubuntu13.10)

ubuntu13.04で無線LANが繋がらない場合の対処