1

私は SSH をいじっていましたが、PHP の ssh2 経由でユーザーのパスワードを変更する必要があります。

これが私のコードです:

$stream = ssh2_exec($ssh, 'passwd test1234');
stream_set_blocking($stream, true);
$data = '';
while($buffer = fread($stream, 4096)) {
    $data .= $buffer;
}
fclose($stream);
echo $data."<hr/>";

$stream = ssh2_exec($ssh, 'saulius123');
stream_set_blocking($stream, true);
$data = '';
while($buffer = fread($stream, 4096)) {
    $data .= $buffer;
}
echo $data."<hr/>";
$stream = ssh2_exec($ssh, 'saulius123');
    stream_set_blocking($stream, true);
    $data = '';
    while($buffer = fread($stream, 4096)) {
        $data .= $buffer;
    }
    echo $data."<hr/>";

しかし、これは私のPHPスクリプトがハングアップするだけです。何かアイデアはありますか?

4

2 に答える 2

2

ssh2_execコマンドを呼び出します。入力を送信するには、ストリームに書き込む必要があります。

つまり、$stream標準入力と標準出力にアクセスできます。そのため、出力を読み返す前にfwrite、onを使用して設定したいパスワードを書き込む必要があります。$stream

ストリームをブロック モードにpasswdしたので、スクリプトが を待っているのと同時に、 は入力 (パスワード) を待っていますpasswd。その結果、スクリプトがハングします。

于 2012-04-23T03:42:16.787 に答える
2

個人的には、純粋な PHP SSH 実装である phpseclib を使用します。例:

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

$key = new Crypt_RSA();
//$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', $key)) {
    exit('Login Failed');
}

echo $ssh->read('username@username:~$');
$ssh->write("ls -la\n");
echo $ssh->read('username@username:~$');
?>

libssh2 に対する最大の利点は移植性です。私が働いているときは Amazon Web Services を使用していますが、新しい製品サーバーや開発サーバーに移行することもありますが、それらのセットアップで最も難しいのは、すべての PECL 拡張機能のインストールです。

対照的に、phpseclib には要件がありません。

于 2012-04-26T05:52:29.683 に答える