目錄
1. SSH2模块的安装" >1. SSH2模块的安装
1.1 安装需要的扩展包" >1.1 安装需要的扩展包
1.2 修改php配置信息" >1.2 修改php配置信息
1.3 重启web服务器" >1.3 重启web服务器
1.4 查看是否加载了ssh2" >1.4 查看是否加载了ssh2
2. SSH2模块的连接应用" >2. SSH2模块的连接应用
2.1 用户名与密码" >2.1 用户名与密码
2.2 ssh密钥" >2.2 ssh密钥
3. SSH2模块的具体应用" >3. SSH2模块的具体应用
3.1 实现远程copy文件" >3.1 实现远程copy文件
3.2 执行远程服务器上的命令并取返回值" >3.2 执行远程服务器上的命令并取返回值
附件:测试中应用到的php代码" >附件:测试中应用到的php代码
首頁 後端開發 php教程 php远路copy以及执行命令

php远路copy以及执行命令

Jun 13, 2016 pm 12:50 PM
connection echo quot ssh stream

php远程copy以及执行命令

php远程copy以及执行命令

php远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据ssh2连接句柄完成。

1. SSH2模块的安装

1.1 安装需要的扩展包

wget  http://www.libssh2.org/download/libssh2-1.4.2.tar.gz
tar zxf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure && make && make install
登入後複製

wget  http://pecl.php.net/get/ssh2-0.11.3.tgz
cd ssh2-0.11.3
phpize   (如果报错命令没有找到,apt-get install php5-dev)
./configure ―with-ssh2 && make && make install
登入後複製

1.2 修改php配置信息

cd  /etc/php5/cgi
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服务器

/etc/init.d/lighttpd restart
登入後複製

1.4 查看是否加载了ssh2

[root@localhost ~]php -m | grep ssh2
ssh2
登入後複製

2. SSH2模块的连接应用

SSH2连接有两种方式,分别是用户名密码,ssh密钥形式。

2.1 用户名与密码

$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密钥

$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登录

#ssh-keygen
登入後複製

有什么提问基本上回车即可

后成的公钥在~/.ssh/id_rsa.pub

如果想在229通过密钥验证登录到222上面,则把229的公钥id_rsa.pub cp到222上面,先手动登录root,然后运行:

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: 接收文件时,后面文件名可以为空,如:

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:发送文件时,后面的文件名不能为空,如:

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上的命令具体实例:

$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 "<br>";
$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 "<br>";
  echo "-----------------------------------------------";
  stream_set_blocking($stream,true);
  echo stream_get_contents($stream); 
  echo "-----------------------------------------------";
echo "<br>";
登入後複製




本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Windows 11 中的 Telnet 完整教學 [安裝/啟用與故障排除] Windows 11 中的 Telnet 完整教學 [安裝/啟用與故障排除] May 22, 2023 pm 09:35 PM

&lt;p&gt;Telnet是「終端網路」的簡稱。它是用戶可以用來將一台電腦連接到本機的協定。 &lt;/p&gt;&lt;p&gt;這裡,本機是指啟動連線的設備,而連接到本機的電腦稱為遠端電腦。 &lt;/p&gt;&lt;p&gt;Telnet在客戶端/伺服器主體上運行,雖然它已經過時,但在2022年它仍然被許多人使用。許多人已經轉向Windows11作業系統,這是微軟提供的最新作業系統。 &

Python伺服器程式設計:使用Paramiko實作SSH遠端操作 Python伺服器程式設計:使用Paramiko實作SSH遠端操作 Jun 18, 2023 pm 01:10 PM

隨著雲端運算和物聯網的發展,遠端操作伺服器變得越來越重要。在Python中,我們可以使用Paramiko模組來輕鬆實現SSH遠端操作。在本文中,我們將介紹Paramiko的基本用法,以及如何在Python中使用Paramiko來遠端管理伺服器。什麼是ParamikoParamiko是一個用於SSHv1和SSHv2的Python模組,可以用於連接和控制SSH客戶

Windows 上的 OpenSSH:安裝、設定和使用指南 Windows 上的 OpenSSH:安裝、設定和使用指南 Mar 08, 2024 am 09:31 AM

對於大多數Windows使用者來說,遠端桌面協定(RDP)一直是遠端管理的首選,因為它提供了友善的圖形介面。然而,對於那些需要更精細控制的系統管理員來說,SSH更適合他們的需求。透過SSH,管理員可以透過命令列與遠端設備進行交互,這樣可以讓管理工作更有效率。 SSH的優勢在於其安全性和靈活性,使得管理員能夠更方便地進行遠端管理和維護工作,尤其是在處理大量設備或進行自動化任務時。因此,儘管RDP在使用者友善性方面表現出色,但對於系統管理員來說,SSH的功能和控制力更勝一籌。以前,Windows用戶需要藉

CONNECTION_REFUSED什麼意思 CONNECTION_REFUSED什麼意思 Jul 31, 2023 pm 02:48 PM

CONNECTION_REFUSED是一種網路連線錯誤,通常會在試圖連接到遠端伺服器時出現。當客戶端設備試圖建立與伺服器的網路連線時,如果伺服器拒絕該連線要求,就會傳回一個CONNECTION_REFUSED錯誤。常見的原因包括:伺服器未啟動、伺服器無法接受更多的連線請求、伺服器防火牆阻止了該連線等。

connection error怎麼解決 connection error怎麼解決 Nov 07, 2023 am 10:44 AM

解決方法:1、檢查網路連線;2、檢查伺服器狀態;3、清除快取和Cookie;4、檢查防火牆和安全軟體設定;5、嘗試使用其他網路等等。

Python基於ssh遠端怎麼連接Mysql資料庫 Python基於ssh遠端怎麼連接Mysql資料庫 May 27, 2023 pm 04:07 PM

背景如果需要訪問遠端伺服器的Mysql資料庫,但是該Mysql資料庫為了安全期間,安全措施設定為只允許本地連接(也就是你需要登入該伺服器才能使用),其他遠端連線是不可以直接訪問,並且對應的連接埠也做了修改,那麼就需要基於ssh來連接該資料庫。這種方式連接資料庫與Navicat裡面介面化基於ssh連接一樣。 Navicat連接資料庫安裝支援庫如果要連接Mysql,首先需要安裝pymysqlpipinstallpymysql安裝基於ssh的函式庫sshtunnelpipinstallsshtunnel#

Linux SSH登入互信配置 Linux SSH登入互信配置 Feb 19, 2024 pm 07:48 PM

1.做ssh互信的目的1.在做集群的時候是需要SSH互信,它有利於在另一節點方便操作。 2.使用scp遠端拷貝操作時,需要輸入目標伺服器的使用者名稱和密碼,這個時候可以做linux伺服器之間ssh互信配置,這樣在多個linux伺服器之間做操作時就可以免密登陸。 2.ssh互信配置的原理簡而言之,伺服器儲存目標主機的證書,以便自動完成認證,無需輸入密碼。 3.ssh互信設定步驟1、各節點產生自己的公鑰、私鑰對。 2、將自己的公鑰文件寄給對方。 3.驗證互信配置是否成功。 4.配置ssh互信這裡以MYDB01和

CentOS 7.9 安裝及centos 7.9 安裝ssh CentOS 7.9 安裝及centos 7.9 安裝ssh Feb 13, 2024 pm 10:30 PM

在進行伺服器建置或系統管理時,CentOS7.9是一個非常常用的作業系統版本,本文將為您提供關於CentOS7.9安裝以及安裝SSH的詳細步驟和說明。 CentOS7.9是一個免費且開源的Linux作業系統,它是基於RedHatEnterpriseLinux(RHEL)的二進位相容版本,以下是CentOS7.9安裝的步驟:1.您需要下載CentOS7.9的ISO鏡像文件,您可以從CentOS官方網站下載最新的CentOS7.9ISO鏡像檔。 2.在您的電腦上建立一個新的虛擬機或實體機,並將

See all articles