준비물 : OpenSSL(lib), libssh2, php_ssh2
리눅스 시스템
1. OpenSSL http://www.openssl.org
직접 다운로드 (http://www.openssl.org/source/openssl-0.9.8k.tar.gz)
2. libssh2 http://sourceforge.net/projects/libssh2/
직접 다운로드 (http://jaist.dl.sourceforge.net/sourceforge/libssh2/libssh2-1.1.tar.gz)
3. ssh2 PHP extension http://pecl.php.net/package/ssh2
직접 다운로드 (http://pecl.php.net/get/ssh2-0.11.0.tgz)
OpenSSL 설치
우선 소스를 적당한 디렉토리 (예제에서는 /usr/local/src 를 사용함) 에 다운로드 받는다.
# tar zxvf openssl-0.9.8k.tar.gz
# cd openssl-0.9.8k
# ./config 또는 ./Configure --linux-elf --prefix=/usr/local/OpenSSL
# make
# make install
Libssh2 설치
소스를 다운로드 받고 적당한 디렉토리에 타르볼을 해제한다.
# tar zxvf libssh2-1.1.tar.gz
# cd libssh2-1.1
# ./configure (기본적으로 설치는 /usr/local 에 이루어진다. )
# make
# make install
설치가 완료된 후에 /usr/local/lib 에 libssh2.so 파일이 존재한다.
PHP ssh2 Extension 설치
# tar zxvf ssh2-0.11.0.tgz
# cd ssh2-0.11.0
# phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
# ./configure
# make
# cp .libs/ssh2.so /usr/local/php/
(이 예제는 PHP Extension을 /usr/local/lib 에 복사를 한다.)
# vi /usr/local/lib/php.ini
extension=ssh2.so 를 추가 시켜준다.
** 여기서 extension_dir의 경로가 /usr/local/php 로 설정이 되어있고 , 시스템마다 다른경로로 표현이 될수 있음
# php -m | grep ssh2
ssh2
설치가 완료 되었으므로 Apache 웹서버를 재 시작해준다.
PHP ssh2 Extension 설치 후 해당 Extension 사용방법이다.
phpinfo() 구문을 실행 했을때 위와 같이 ssh2 확장이 설치가 되어 있어야 한다.
$arMethod = array( // 접속 메소드를 설정한다. 'kex' => 'diffie-hellman-group1-sha1', 'client_to_server' => // 클라이언트 -> 서버 array( 'crypt' => '3des-cbc', // 암호화 방식은 3des-cbc 로 사용하고 'comp' => 'none' // 압축은 사용하지 않는다. ), 'server_to_client' => // 서버 -> 클라이언트 array( 'crypt' => 'aes256-cbc,aes192-cbc,aes128-cbc', // 암호화 방식 'comp' => 'none' // 압축사용여부 ) ); // SSH 에 접속한다. $rCon = ssh2_connect('125.***.50.***', 22, $arMethod); $bLgn = ssh2_auth_password($rCon ,'lovelgw' , '********'); // 계정 , 비밀번호를 적어 넣는다. var_dump($bLgn); // true로 나오면 정상 접속 // 프로그램 실행 $strExec = '/usr/local/bin/php -m'; $rStream = ssh2_exec($rCon, $strExec); stream_set_blocking($rStream, true); // 스트림을 블럭킹 모드로 변환시킨다. echo fread($rStream, 10240); // 값을 가져온다. 10240 Byte까지만 ?>
위와같은 식으로 사용하면 된다.