Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □PHPでSSH2したい

□PHPでSSH2したい

Vine5.1な某システムで、PHPでSSH2をしたくなったけど、実際にはSSH2の
ライブラリ(libssh2)とかを入れないといけないので、メモを残しておく、

apt-cache search ssh2

で探してみると、libsshと言うのが見つかるけど、libssh2とかでなくても
大丈夫なんだろうか?と思いつつインストールしてみる。

apt-get install libssh

そしてPECLでssh2関連をインストールしようとするも、まだベータ版らしい
ので

pecl install ssh2-beta

としてインストール…してみると、やっぱり

> configure: error: The required libssh2 library was not found.  You can obtain that package from http://sourceforge.net/projects/libssh2/

と言うエラーがでてダメでした。

http://sourceforge.net/projects/libssh2/

にアクセスしてみると、どうやらまだrpmもないらしい。
久しぶりにtar.gzからインストールですね。

cd /usr/src/package/
wget http://www.libssh2.org/download/libssh2-1.2.7.tar.gz
cd /usr/src/
tar xvzf ./package/libssh2-1.2.7.tar.gz
cd libssh2-1.2.7/

で、ためしに ./configure してみると、

> configure: error: cannot find OpenSSL or Libgcrypt,
> try –with-libssl-prefix=PATH or –with-libgcrypt-prefix=PATH

なんてでるので、どうやらこれらのライブラリもいるらしい。
これはapt-getできるかなと探してみると、libsslについては明確にはない
けど、opensslが該当するらしい。
それぞれ、-develをインストールする。

apt-get install openssl-devel
apt-get install libgcrypt-devel

さて、これで./configureしましょう。

./configure –prefix=/usr

とすると、結果が

>   version:          1.2.7
>   Host type:        x86_64-unknown-linux-gnu
>   Install prefix:   /usr
>   Compiler:         gcc
>   Compiler flags:   -g -O2
>   Library types:    Shared=yes, Static=yes
>   Crypto library:   openssl: yes (AES-CTR: no) libgcrypt: no
>   Debug build:      no
>   Path to sshd:     /usr/sbin/sshd (only for self-tests)
>   libz compression: yes

となって、libgcryptがないという。

むー、ldconfig -p | grep libgcrypt するとちゃんと入っているんだ
けどなぁ…というわけで、パスを指定してみます。

./configure \
  –prefix=/usr \
  –with-libgcrypt-prefix=/usr/lib

とか

./configure \
  –prefix=/usr \
  –with-libgcrypt-prefix=/usr/lib64

とか、どう指定してもlibgcryptはnoになっちゃうけど、./configure は
正常終了なので、まぁ無視してすすみます。

./configure –prefix=/usr
make
make check
make install

あ、64bitなのに/usr/libに入っちゃった…けどまぁいいか。

pecl install ssh2-beta

…あれ、エラーだ

> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:52: error: duplicate ‘static’
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c: In function ‘zif_ssh2_methods_negotiated’:
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:503: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:504: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:508: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:509: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:510: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:511: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:516: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:517: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:518: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:519: 警告: passing argument 4 of ‘add_assoc_string_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c: In function ‘zif_ssh2_publickey_add’:
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:1045: 警告: passing argument 1 of ‘_efree’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c: In function ‘zif_ssh2_publickey_list’:
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:1104: 警告: passing argument 4 of ‘add_assoc_stringl_ex’ discards qualifiers from pointer target type
> /var/cache/php5-pear/ssh2-0.11.0/ssh2.c:1105: 警告: passing argument 4 of ‘add_assoc_stringl_ex’ discards qualifiers from pointer target type
> make: *** [ssh2.lo] エラー 1
> ERROR: `make’ failed

ググって見ると、パッチを当てないといけないらしい。

http://pecl.php.net/bugs/bug.php?id=16727&edit=1

┐(´д`)┌ ヤレヤレ、だいぶ前の話なのだからバージョンアップしてくれよ。

cd /usr/src/package/
wget http://pecl.php.net/get/ssh2-0.11.0.tgz
cd /usr/src/
tar xvfz ./package/ssh2-0.11.0.tgz

cd ./ssh2-0.11.0
cat > ssh2-php53.patch

--ここから------------------------
— ssh2.c.php53 2008-12-14 10:04:22.000000000 +0100
+++ ssh2.c 2008-12-14 10:04:24.000000000 +0100
@@ -48,7 +48,6 @@
 #endif
 
 #ifdef ZEND_ENGINE_2
-static
     ZEND_BEGIN_ARG_INFO(php_ssh2_first_arg_force_ref, 0)
         ZEND_ARG_PASS_INFO(1)
     ZEND_END_ARG_INFO()
--ここまで------------------------

で、パッチを当てて

patch -p0 < ssh2-php53.patch

作り直し。(オプションは取っ払う)

rm -f configure
phpize
./configure –with-php-config=/usr/bin/php-config
make
make install

とすると、/usr/lib64/php5/ に

ssh2.so

がインストールされるので、あとは php.ini に追記。

emacs /etc/php5/php.ini

> extension=ssh2.so

さて、phpinfo();でssh2が入ったか見てみるか…あ、

> PHP Warning:  PHP Startup: Unable to load dynamic library ‘/usr/lib64/php5/ssh2.so’ – libssh2.so.1: cannot open shared object file: No such file or directory in Unknown on line 0

やっぱり怒られたか。

cd /usr/lib64
ln -s /usr/lib/libssh2.so.1 libssh2.so.1

として回避。(笑)

で、phpinfo();で見てみると、

> ssh2
>
> SSH2 support => enabled
> extension version => 0.11.0-dev
> libssh2 version => 1.2.7
> banner => SSH-2.0-libssh2_1.2.7
> remote forwarding => enabled
> hostbased auth => enabled
> polling support => enabled
> publickey subsystem => enabled
>

と、やっと入りましたとさ。

あとはこんなスクリプトで試すと

<?php

$SCP_HOST = ‘hogehoge.example.com’;
$SCP_PORT = 22;
$SCP_USER = ‘username’;
$SCP_PASS = ‘password’;
$SCP_HOSTKEY = array(‘hostkey’=>’ssh-dss’);
$SCP_PUBKEY = ‘/home/username/.ssh/id_dsa.pub’;
$SCP_SECKEY = ‘/home/username/.ssh/id_dsa’;
$SCP_PASSP = ‘passphrase’;

$SCP_CONN = ssh2_connect($SCP_HOST, $SCP_PORT, $SCP_HOSTKEY);

if (ssh2_auth_pubkey_file($SCP_CONN, $SCP_USER, $SCP_PUBKEY, $SCP_SECKEY, $SCP_PASSP))
{
    echo “Public Key Authentication Successful\n”;
}
else
{
    die(“Public Key Authentication Failed\n”);
}

?>

うまく認証が通れば

> Public Key Authentication Successful

と表示されるし、だめなら

> PHP Warning:  ssh2_auth_pubkey_file(): Authentication failed for root using public key in – on line 14
> Public Key Authentication Failed

みたいになります。

めでたしめでたし!?

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です