私は1つの小さな問題/副作用でこの制限を回避することができます。
オプションUserKnownHostsFile=/dev/null
とStrictHostKeyChecking=no
を設定すると、SSHを実際には格納していないか、ホスト鍵の検証が必要なものにすることができます。
を「いいえ」に設定すると、キーを最初に認識または確認せずにサーバーに接続できます。 /dev/null
をUserKnownHostsFile
に使用するだけで、何も読み書きしないので、保存された値は読み取られません。
SSHはまだ.ssh
ディレクトリを作成しようとしていますが、失敗すると警告が表示され、接続が続行されます。警告は出力に含まれます(警告を抑制しない限り)。
ここは例です。注:この例では、認証を設定していないので、パスワードの認証と失敗を試みますが、IDを使用しているので、正常に接続できるはずです。
<?php
$ssh_command = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "
."-p 2223 [email protected]";
exec("$ssh_command ls 2>&1", $out);
var_dump($out);
// output when called from browser running as daemon(1)
array(5) {
[0]=>
string(44) "Could not create directory '/usr/sbin/.ssh'."
[1]=>
string(110) "Warning: Permanently added '[host.localdomain]:2223,[192.168.88.20]:2223' (RSA) to the list of known hosts."
[2]=>
string(36) "Permission denied, please try again."
[3]=>
string(36) "Permission denied, please try again."
[4]=>
string(82) "Received disconnect from 192.168.88.20: 2: Too many authentication failures for user"
}
あなたの出力は、最も可能性の高い出力のみが続く恒久的に知られているホスト(/dev/null
)のリストにホストを追加することについての警告、続く、.ssh
ディレクトリを作成できないという最初の警告が含まれますあなたの命令から。最初の行がこの警告であるかどうかを確認し、$out
配列からそれをシフトさせる必要があります。
もう1つの注意:悪意のあるサーバーへの接続を試みるために、中間者攻撃やDNS/IPハッキングの可能性があります。
シマンテックのSSH Host Key Protectionに関する記事を参照してください。
私は困惑しています。あなたは味とは別の理由がありますか? Apacheプロセスから特定の要求を受け取り、応答を返す別のユーザーアカウントで実行されているサービス内でSSHをコンパートメント化することは実際には価値がありますか? – minopret
PHP SSH2ライブラリを使用したくない主な理由は、私がPECLを一切扱わないことでした。受け入れられた答えの解は良いものだと思います。 – Rafe