gpt4 book ai didi

php - 使用 phpseclib ssh2 exec() 函数时如何设置标志?

转载 作者:可可西里 更新时间:2023-11-01 00:51:42 26 4
gpt4 key购买 nike

我正在使用 phpseclib并且需要制作几个 php 函数,使某人能够以编程方式 ssh 进入他们的服务器并更改 root 密码,还可以更改可能忘记密码的用户的密码(因此必须以 root 身份登录)。

我尝试使用 libssh2,但发现使用起来有点麻烦。我现在正在查看 phpseclib,它看起来更强大。但是当我尝试像这样使用“su”命令时:

echo $ssh->exec('su');

我得到回复:

su: must be run from a terminal

当我尝试使用 sudo 时:

echo $ssh->exec('sudo passwd root');

我得到错误:

sudo: no tty present and no askpass program specified

无论如何,事实证明 su 对于直接 ssh 访问是禁用的,但是在查看 this article 之后,事实证明您可以使用以下命令完成此操作:

ssh -t -t -l 'username' 'host' 'su -'

无论如何,当我从我的笔记本电脑(运行 ubuntu)进入终端时,这就是最终对我有用的方法,然后我输入我的密码,然后输入 root 密码以完成。

引用上面链接的网站:

Ssh commands (using -t) the remote sshd to establish a 'pseudo-terminal' pipe to the worker process when -t is given.

. ssh does this as long as its stdin is a terminal.

. But if ssh's stdin is a non-terminal, ssh won't direct sshd to establish a
pseudo-terminal unless TWO -t's are given:

echo password | ssh -t -t -l username remote_host

. So with -t -t (from ssh) sshd sets up a pseudo-terminal to the client process.

. The client, whether it be 'tty' or 'su' cannot tell it is connected to a ficticious >terminal:

echo dummystr | ssh -t -t -l username host.com -c ''tty'

echo password | ssh -t -t -l username host.com -c 'su -'

So there is the answer. Use double -t if you are 'su root'ing' on a linux box through an >interactive client ssh like the one from OpenBSD.

所以,正如我上面所说,它实际上是从终端运行的:

ssh -t -t -l 'username' 'host' 'su -'

但我真的希望能够使用 phpseclib 执行此命令。唯一的问题是我不知道如何将任何标志放入 exec() 函数中。具体来说,我需要放入 -t 标志(两次)。

我找了好久都没找到。非常感谢在这方面的一些帮助。也对这篇文章的长度感到抱歉。 :)

干杯

最佳答案

如果 sudo passwd root 需要 tty,请在 phpseclib 中尝试 read()/write()。例如。

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('localhost', 22);
$ssh->login('username', 'password');

$ssh->read('[prompt]');
$ssh->write("sudo passwd root\n");
$ssh->read('Password:');
$ssh->write("Password\n");
echo $ssh->read('[prompt]');
?>

实际上,我只是从您的另一篇文章中复制/粘贴:php ssh2_exec not executing 'su' command

看起来你在那里得到了一些帮助然后停止跟进?有人建议您需要在命令中添加新行。你试过了吗?他们还建议在 phpseclib 支持论坛上发帖。对我来说似乎是一个很好的建议......

关于php - 使用 phpseclib ssh2 exec() 函数时如何设置标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com