php 实现ssh
PHP 实现 SSH 连接
在 PHP 中实现 SSH 连接通常可以通过 phpseclib 库完成,这是一个纯 PHP 实现的 SSH 库,支持 SSH2、SFTP 和 SCP 功能。
安装 phpseclib
使用 Composer 安装 phpseclib:
composer require phpseclib/phpseclib:~3.0
基本 SSH 连接与命令执行
以下是一个简单的示例,展示如何通过 PHP 建立 SSH 连接并执行命令:
<?php
require_once 'vendor/autoload.php';
use phpseclib3\Net\SSH2;
$host = 'your_server_ip';
$username = 'your_username';
$password = 'your_password';
$ssh = new SSH2($host);
if (!$ssh->login($username, $password)) {
exit('Login Failed');
}
echo $ssh->exec('ls -la');
?>
使用密钥认证
如果需要使用密钥认证,可以使用以下方式:
<?php
require_once 'vendor/autoload.php';
use phpseclib3\Net\SSH2;
use phpseclib3\Crypt\PublicKeyLoader;
$host = 'your_server_ip';
$username = 'your_username';
$privateKey = 'path/to/private_key';
$ssh = new SSH2($host);
$key = PublicKeyLoader::load(file_get_contents($privateKey));
if (!$ssh->login($username, $key)) {
exit('Login Failed');
}
echo $ssh->exec('ls -la');
?>
SFTP 文件传输
如果需要通过 SFTP 传输文件,可以使用以下代码:
<?php
require_once 'vendor/autoload.php';
use phpseclib3\Net\SFTP;
$host = 'your_server_ip';
$username = 'your_username';
$password = 'your_password';
$sftp = new SFTP($host);
if (!$sftp->login($username, $password)) {
exit('Login Failed');
}
$sftp->put('remote_file.txt', 'local_file.txt', SFTP::SOURCE_LOCAL_FILE);
?>
注意事项
- 确保服务器已启用 SSH 服务,并且防火墙允许 SSH 连接(默认端口 22)。
- 使用密钥认证时,确保私钥文件的权限设置正确(通常为
600)。 - 对于生产环境,建议使用密钥认证而非密码认证,以提高安全性。
错误处理
在实际应用中,应添加适当的错误处理逻辑:
try {
$ssh = new SSH2($host);
if (!$ssh->login($username, $password)) {
throw new Exception('SSH login failed');
}
echo $ssh->exec('ls -la');
} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}






