粉雪琪的天涯 发布于 2017-05-13 06:39

如何使用php模拟实现ssh方式登录执行mysql语句输出结果?类似于navicat的SSH连接数据库


查询php.net SSH文档先验证SSH:

$conn=ssh2_connect('SSH IP',22);
ssh2_auth_password($conn,'SSH USER','SSH PASS');

然后看网上几种不知道是否正确的写法:
1.使用ssh2_tunnel

$tunnel = ssh2_tunnel($conn, 'REMOTE MYSQL IP', 3307);
$mysqli=new mysqli('127.0.0.1','MYSQL USER','MYSQL PASS','MYSQL DB',3307,$tunnel);
$result=$mysqli->query($SQL);

2.使用ssh2_exec

$stream=ssh2_exec($connection,'echo "select * from db.table where id=\"1\";"  | mysql');

3.使用shell_exec

shell_exec("ssh -f -L 127.0.0.1:3307:127.0.0.1:3306 user@remote.rjmetrics.com sleep 60 >> logfile");  
$db = mysqli_connect('127.0.0.1', 'MYSQL USER','MYSQL PASS','MYSQL DB', 3307);

...好像还有使用ssh2_shell的,在不知道数据库服务器可以执行那些脚本的情况下怎么写这个连接?

1 个回答
  • 可以参看我的笔记介绍SSH2的

    连接到远程shell:

    $connection = ssh2_connect('example.com', 22);
    
    if (ssh2_auth_password($connection, 'root', 'password')) {
        echo "Authentication Successful!\n";
    } else {
        die('Authentication Failed...');
    }
    

    执行命令:

    $stream = ssh2_exec($connection, 'mysql -uroot -p密码;use 数据库名;select * from table_name');
    

    获取返回结果:

    stream_set_blocking($stream, true);
    $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    echo stream_get_contents($stream_out);
    
    2017-05-13 17:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
活跃用户
  • 1
    问道摩托
  • 2
    袁广龙976丶
  • 3
    逍遥子
  • 4
    亮仔
  • 5
    芙蓉花
  • 6
    作小die_syj
  • 7
    王丽珠景平怡伦_621
  • 8
    adfa3sd5f6a
  • 9
    欣欣大妮
  • 10
    狂风DKC想毕业321
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有