使用 phpseclib 在 PHP 中模拟 SSH 跳转主机行为

问题描述 投票:0回答:1

我在尝试使用 phpseclib2 或 phpseclib3 库或本机使用 Secure Shell2 (libssh2) 模拟类似于命令“ssh -J [email protected] [email protected]”的跳转时遇到问题。

我可以成功连接到堡垒,但是当我尝试使用“exec”执行 SSH 命令时,这是不允许的,给我一个“权限被拒绝(公钥)”错误。这似乎是因为它不是像直接 bash 命令“ssh -J”那样真正的跳转。

使用 phpseclib3 在 PHP 中实现

<?php

require __DIR__ . '/../vendor/autoload.php';

use phpseclib\Crypt\RSA;
use phpseclib\Net\SSH2;

// Connection parameters
$bastionHost = 'bastion.net';
$bastionPort = 22;
$bastionUser = 'identifier';
$bastionPass = '';

$address = 'xx.xx.xx.xx';
$user = 'identifier';
$port = 22;

$privateKeyPath = 'ssh_key';

$rsa = new RSA();
$rsa->loadKey(file_get_contents($privateKeyPath));

$ssh = new SSH2($bastionHost, $bastionPort);
if (!$ssh->login($bastionUser, $rsa)) {
    throw new \Exception('Login failed');
}

echo $ssh->exec("ssh $user@$address");  // Permission denied (publickey)

我正在寻找一种解决方案来真正模拟跳跃的行为。任何建议将不胜感激。谢谢!

php ssh phpseclib libssh2
1个回答
0
投票

隧道不仅仅是“在远程启动另一个 ssh 命令”,它是协议的一部分,并且目前尚未在 phpseclib 中实现。

https://github.com/phpseclib/phpseclib/issues/1096

替代方案是将现有代码与 SSH 代理和代理转发一起使用。

https://phpseclib.com/docs/auth#ssh-agent

© www.soinside.com 2019 - 2024. All rights reserved.