Mac OS X 10.6のコマンドラインからPHPを使用して、リモートサーバーへのインタラクティブなSSH接続を確立しようとしています。現在、PHPのproc_open関数を使用して次のコマンドを実行しています。
ssh -t -t -p 22 user@server.com
これはほとんど機能します。-t -t
オプションは、ほとんどの場合、疑似端末を強制することになっています。SSHパスワードを入力して、Enterキーを押すことができます。ただし、Enterキーを押した後、端末は単にハングしているように見えます。出力も何もありません-SSHセッションが失敗したかのようです。コマンドなどを実行できず、Ctrl+Cを使用してすべてを強制終了する必要があります。ssh -t -t -p 22 user@server.com "ls -la"
のようなコマンドを実行して正しい出力を取得できるため、ログインが成功したことはわかっています。
この問題は、proc_open呼び出しで標準パイプを使用していたことに関連していると考えたため、それらをptyに置き換えました。次のエラーが発生します:「このシステムではpty疑似端末がサポートされていません...」
Mac OS Xは単にptyまたは疑似端末をサポートしていませんか?(私はこのすべてのシェル用語を使用するのはかなり新しいです)。
PHPコードは次のとおりです。
$descriptorspec = array(0 => array("pty"), 1 => array("pty"), 2 => array("pty"));
$cwd = getcwd();
$process = proc_open('ssh -t -t -p 22 user@server.com', $descriptorspec, $pipes, $cwd);
if (is_resource($process))
{
while (true)
{
echo(stream_get_contents($pipes[1]));
$status = proc_get_status($process);
if (! $status["running"])
break;
}
}
(申し訳ありませんが、SOのフォーマット手順を理解することはできません...)
私は何が間違っているのですか?なぜptyを使用できないのですか?これはMacOSXでは不可能ですか?ご協力いただきありがとうございます!