0

我已经使用 ssh2-connect 连接到远程服务器,并且我正在使用ssh2 _exec 运行此命令"sshpass -p 'xxxx1248' ssh XX@1x2.1xx.3x.xx ",现在如果我连接到新的远程服务器,我想访问他们的 shell。我有一个任务要在第二个远程服务器上运行命令。我该怎么办??

$connection = ssh2_connect($sIP, $iPort);

$autherised = ssh2_auth_password($connection, $sUserName, $sPassword);
$oResult = ssh2_exec($connection, "sshpass -p 'xxxx1248' ssh XX@1x2.1xx.3x.xx");

如何访问 IP 的外壳1x2.1xx.3x.xx

如果有人以前这样做过,请解决这个问题....

4

1 回答 1

0

我将提供一个代码片段,它将在目标机器上运行“ls”命令。让我知道这是否是你想要的。

$conn = ssh2_connect($host, $port);
ssh2_auth_password($conn, $user, $pass);
// runs the ls -al command on $targetHost
$stream = ssh2_exec($conn,
    "sshpass -p '{$passTarget}' ssh $targetUser@$targetHost ls -al"
);

// retrieving the data
stream_set_blocking($stream, true);
$output = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);

echo stream_get_contents($output);

此代码输出$targetHost机器上的目录列表。

我希望这有帮助。

编辑:

我将在这里添加一个示例:

在我的目标机器上,我创建了一个小的 bash 脚本test.sh

export TEST_VAR=1

然后我将ssh2_exec行更改为:

$stream = ssh2_exec($conn,
    "sshpass -p '{$passTarget}' ssh $targetUser@$targetHost 'source test.sh; echo \$TEST_VAR'"
);

我得到了预期的结果:1

于 2016-06-29T13:15:02.993 回答