使用 phpseclib 库连接到 mysql 数据库

2023-12-23

我已使用 phpscelib 库成功连接到我的 VPS。现在我想连接到我现有的数据库。请帮助我吗?

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');

include('Net/SSH2.php');


$ssh = new Net_SSH2('192.ccc.ccc.ccc');
if (!$ssh->login('ccc', 'cccc')) {
exit('Login Failed');
}

echo $ssh->exec("I need to put MySql commands here");
?>

首先,允许该用户远程访问mysql不是更好吗?不过,我不知道你的理由。

最常见的透明方式是创建 ssh 隧道。这可以通过两种不同的方式来完成。如果 mysql 计算机上未打开 mysql 端口 (3306),则您将需要一个必须由远程计算机打开的反向 ssh 隧道。登录 mysql 机器并发出以下命令:

ssh -R 12345:localhost:3306 user@php_machine -N

如果远程计算机上的 mysql 端口打开,则 php 计算机可以打开隧道:

ssh -f user@mysql_machine -L 12345:mysql_machine:3306 -N

无论隧道的创建方式如何,PHP 应用程序现在都可以仅使用 PDO 并连接到本地主机端口 12345。

$pdo = new PDO('mysql:host=localhost;port=12345;dbname=test', $user, $password);

所有流量都将通过隧道进行加密。


如果您只想发出几个简单的命令,您可以使用以下替代方案。

最简单但是unsecure方法是使用以下命令:

echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');

这是不安全的,因为系统上的其他用户可以看到该密码。

您可以使用以下方法解决安全问题expect. expect是一个可以以更安全的方式将密码传递给mysql的程序。确保expect安装在远程系统上。这是一个使用的示例SHOW TABLES数据库命令test:

include('Net/SSH2.php');

$ssh = new Net_SSH2('192.xxx.xxx.xxx');
if (!$ssh->login('ssh_user', 'ssh_password')) {
exit('Login Failed');
}

echo $ssh->exec('expect <<EOF
# disable command output
log_user 0
# start the mysqldump process
spawn mysql -uTHE_USER -p test -e "SHOW TABLES"
# wait for the password prompt
expect "password:"
# send the password (mind the \r)
send "THE_PASSWORD\r"
# enable output again
log_user 1
# echo all outout until the end
expect eof
EOF
');

为了进一步了解发生了什么,我最近写了一篇博客文章 http://www.metashock.de/2013/07/safely-pass-mysql-credentials-to-mysqldump-in-a-script/关于那个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 phpseclib 库连接到 mysql 数据库 的相关文章

随机推荐

  • 从 Promise 内部返回已解析的 Observable

    我正在尝试通过扩展默认值来构建自定义 Angular 2 http 请求 并且我正在使用 Ionic 2 本地存储来存储身份验证令牌 将来可能会使用文件系统 我的问题是如何从我的 http 服务返回已解决的承诺 以便我可以在我的组件中订阅
  • 使用 graph_tool 的所有最短路径

    我想知道 graph tool 中是否有一个内置函数可以用来查找all从节点 s 到节点 t 的最短路径 如果没有 有什么方法可以使用shortest distance 在模块graph tool topology中 或shortest p
  • 时间:2019-03-17 标签:c#integervalidationcompactframework

    使用 Net Compact Framework 2 0 如何验证整数 Int32 TryParseCompact Framework 不支持 验证 是什么意思 你的意思是解析而不抛出 static bool TryParse string
  • 如何使用 php 从 HTML 中删除

    标签及其内容

    下面是我需要删除的文字 p 标签来自 p p Addiction stress and subjective wellbeing p p The need and significance of traditional shop lot p
  • 为什么Java构造函数不能同步?

    根据Java语言规范 http java sun com docs books jls third edition html classes html 8 8 3 构造函数不能标记为同步 因为在创建该对象的线程完成之前 其他线程无法看到正在
  • 哈希表中的开放寻址仅对搜索有用吗?首先,元素是如何进入哈希表的?

    From 关于开放寻址的维基百科链接 http en wikipedia org wiki Open addressing 开放寻址或封闭散列是一种碰撞方法 哈希表中的分辨率 使用这种方法 哈希冲突是 通过探测或搜索中的替代位置来解决 数组
  • 使用 AJAX 和 jquery 以及 Codeigniter 将表单数据传递到控制器

    我正在尝试将此表单中的数据发布到数据库中 我尝试过一些教程但没有成功 这是我的代码 有任何想法吗 View
  • 如何自定义 virtualenv shell 提示符

    如何定义激活时使用的自定义提示Python虚拟环境 https pypi python org pypi virtualenv 我有一个 bash 脚本 用于激活调用特定时使用的 virtualenvFabric http docs fab
  • Spring Boot JPA 存储库类的 Byte Buddy 运行时生成

    我在用字节好友生成 JPA 实体和 JPA 存储库 我能够生成 JPA 实体 但无法继续生成相应的 JPA 存储库 以下是代表 Person 实体的代码 import javax persistence Entity public clas
  • IBM MQSeries 与 Tomcat 的连接池

    我们正在尝试建立从 tomcat 到 IBM MQSeries 的 jms 连接 并考虑建立连接池 我们点击了下面的链接 并提供了建议的解决方案 使用 Tomcat 的 WebSphere MQ 连接池 https stackoverflo
  • 为什么 perfmon 看不到我的自定义性能计数器的实例?

    我正在为应用程序创建一些自定义性能计数器 我编写了一个简单的 C 工具来创建类别和计数器 例如 下面的代码片段基本上就是我正在运行的代码片段 然后 我运行一个单独的应用程序 不断刷新计数器的原始值 当它运行时 计数器和虚拟实例会在本地的 p
  • 听向上/向下滚动?

    我正在构建一个应用程序 ES6 我很好奇捕获向上 向下滚动事件的 正确 方法是什么 我尝试 npm 安装react scroll listener 但我无法让它与我的ES6类一起工作 基本上我想要 如果向上滚动 则执行此操作 如果向下滚动
  • 在R中添加具有连续数字的列

    如果这个问题非常简单 我深表歉意 但我正在寻找一种方法 将一列连续整数添加到数据帧中 如果我的数据帧有 200 个观察值 例如 第一个观察值从 1 开始 并且最后一个以 200 结尾 我怎样才能做到这一点 对于数据框 df 您可以使用 df
  • Angular 2 表单验证,minLength 验证器不起作用

    我有以下 Angular 2 形式
  • SQL 更新 - 多列

    我想使用第二个表中的值来更新表中的多个列Select语句来获取这样的值 UPDATE tbl1 SET col1 col2 col3 SELECT colA colB colC FROM tbl2 WHERE tbl2 id someid
  • 如何自动将 C++ 文件转换为 Wireshark Lua 解析器

    我有一个定义特定协议的 C 文件 该文件包含定义协议中使用的消息的结构 每个结构体都包含特定消息的字段 示例如下 struct STATS00 MESSAGE T uint8 t message type uint16 t num send
  • 在这个CGBitmapContextCreate中,为什么bytesPerRow为0?

    我在Apple的示例代码中注意到 他们经常在CGBitmapContextCreate的bytesPerRow参数中提供0值 例如 这来自反射 http developer apple com library ios samplecode
  • Android 上不显示 OneSignal-Pushnotification 小图标

    我们有一个 Cordova 应用程序 其中每个 drawable xy 文件夹中都包含一个文件 icon png 我们使用 OneSignal 提供推送通知 通知正在按预期工作 除了那个小图标 我的手机顶部栏上只有一个空白图标 其中显示应用
  • 粗体文本行高高于普通文本行高

    一定是我在这里缺少的一些基本东西 我认为 font weight bold 不应该改变文本占用的垂直空间 特别是当行高设置为高于字体大小时 http jsfiddle net Arkkimaagi 7xAyy http jsfiddle n
  • 使用 phpseclib 库连接到 mysql 数据库

    我已使用 phpscelib 库成功连接到我的 VPS 现在我想连接到我现有的数据库 请帮助我吗 首先 允许该用户远程访问mysql不是更好吗 不过 我不知道你的理由 最常见的