php遠程copy以及執行命令_PHP教程

來源:互聯網
上載者:User
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 安裝需...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.