php遠程copy檔案以及在遠程伺服器中執行命令時,所用到的模組是ssh2,以後所有的操作都依據ssh2串連控制代碼完成。
1. SSH2模組的安裝
1.1 安裝需要的擴充包
[plain]
wget
tar zxf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure && make && make install
wget
tar zxf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure && make && make install
[plain]
wget
cd ssh2-0.11.3
phpize (如果報錯命令沒有找到,apt-get install php5-dev)
./configure —with-ssh2 && make && make install
wget
cd ssh2-0.11.3
phpize (如果報錯命令沒有找到,apt-get install php5-dev)
./configure —with-ssh2 && make && make install
1.2 修改php配置資訊
[plain]
cd /etc/php5/cgi
vim php.ini
添加項:extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so是編譯ssh2時得到的模組,上面是模組的位置。
cd /etc/php5/cgi
vim php.ini
添加項:extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so是編譯ssh2時得到的模組,上面是模組的位置。
[plain]
cd /etc/php5/cli
vim php.ini
添加項:extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so是編譯ssh2時得到的模組,上面是模組的位置。
cd /etc/php5/cli
vim php.ini
添加項:extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so是編譯ssh2時得到的模組,上面是模組的位置。
1.3 重啟web伺服器
[plain]
/etc/init.d/lighttpd restart
/etc/init.d/lighttpd restart
1.4 查看是否載入了ssh2
[plain]
[root@localhost ~]php -m | grep ssh2
ssh2
[root@localhost ~]php -m | grep ssh2
ssh22. SSH2模組的串連應用
SSH2串連有兩種方式,分別是使用者名稱密碼,ssh密鑰形式。
2.1 使用者名稱與密碼
[php]
$connection = ssh2_connect("192.168.6.222",22);
if (ssh2_auth_password($connection,"veno","ubuntu"))
{
echo "Authentication Successful! ";
}else{
die("Authentication Failed...");
}
$connection = ssh2_connect("192.168.6.222",22);
if (ssh2_auth_password($connection,"veno","ubuntu"))
{
echo "Authentication Successful! ";
}else{
die("Authentication Failed...");
}
2.2 ssh密鑰
[php]
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
'/root/.ssh/id_rsa.pub',
'/root/.ssh/id_rsa'))
{
echo "Public Key Authentication Successful\n";
} else {
echo ('Public Key Authentication Failed');
}
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
'/root/.ssh/id_rsa.pub',
'/root/.ssh/id_rsa'))
{
echo "Public Key Authentication Successful\n";
} else {
echo ('Public Key Authentication Failed');
}
Ps: 密鑰產生:
在伺服器192.168.6.229上面以root登入
[plain]
#ssh-keygen
#ssh-keygen
有什麼提問基本上斷行符號即可
後成的公開金鑰在~/.ssh/id_rsa.pub
如果想在229通過密鑰驗證登入到222上面,則把229的公開金鑰id_rsa.pub cp到222上面,先手動登入root,然後運行:
[plain]
cat id_rsa.pub >> ~/.ssh/authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys
這樣就可以在229上面ssh 192.168.6.229不需要輸入密碼即可登入到222。上面php代碼在229上面也可以通過驗證。
3. SSH2模組的具體應用
通過SSH2驗證通過後,得到的串連符為$connection
3.1 實現遠程copy檔案
遠程伺服器檔案copy到本地:
bool ssh2_scp_recv ( resource $session, string $remote_file, string $local_file )
Ps: 接收檔案時,後面檔案名稱可以為空白,如:
[php]
ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/')
ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/')
本地檔案copy到遠程伺服器
bool ssh2_scp_send ( resource $session, string $local_file, string $remote_file [, int $create_mode] )
Ps:傳送檔案時,後面的檔案名稱不可為空,如:
[php]
ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
3.2 執行遠程伺服器上的命令並取傳回值
resource ssh2_exec( resource $session, string $command [, string $pty [, array $env [, int $width [, int $height [, int $width_height_type]]]]] )
在229上面執行222上的命令具體執行個體:
[php]
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
附件:測試中應用到的php代碼
[php]
echo "是訪問到這裡來了";
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
'/root/.ssh/id_rsa.pub',
'/root/.ssh/id_rsa'))
{
echo "Public Key Authentication Successful\n";
//$flag=ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/');
//接收時,後面檔案名稱可以為空白
//$flag=ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
//發送時,後面的檔案名稱不可為空
//echo $flag;
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
} else {
echo ('Public Key Authentication Failed');
}
echo "
";
$connection = ssh2_connect('192.168.6.222', 22);
ssh2_auth_password($connection, 'veno', '*******');
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
echo "
";
echo "-----------------------------------------------";
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
echo "-----------------------------------------------";
echo "
";
echo "是訪問到這裡來了";
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
'/root/.ssh/id_rsa.pub',
'/root/.ssh/id_rsa'))
{
echo "Public Key Authentication Successful\n";
//$flag=ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/');
//接收時,後面檔案名稱可以為空白
//$flag=ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
//發送時,後面的檔案名稱不可為空
//echo $flag;
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
} else {
echo ('Public Key Authentication Failed');
}
echo "
";
$connection = ssh2_connect('192.168.6.222', 22);
ssh2_auth_password($connection, 'veno', '*******');
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
echo "
";
echo "-----------------------------------------------";
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
echo "-----------------------------------------------";
echo "
";
http://www.bkjia.com/PHPjc/477602.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477602.htmlTechArticlephp遠程copy檔案以及在遠程伺服器中執行命令時,所用到的模組是ssh2,以後所有的操作都依據ssh2串連控制代碼完成。 1. SSH2模組的安裝 1.1 安裝需...