[PHP] PHPで秘密鍵を使ってSSH認証する

PHPで秘密鍵文字列からSSH認証する方法。

PECLのssh2をインストールしている前提とする。

ssh2をインストールする方法は、他に参考サイトがあるので割愛するが、

  • php-fedora-atuloader
  • php-pear
  • php-devel
  • libssh2
  • libssh2-devel
  • gcc

この辺りをインストールしとけば、pecl install ssh2 で入ったと思う。

あとは、extensionに設定して、apache再起動。

後は以下の通り

$sshKey <<<EOD
-----BEGIN RSA PRIVATE KEY-----
~略~
-----END RSA PRIVATE KEY-----
EOD;

$host = '192.168.0.11';
$port = 22;
$user = 'work'
$tmpPrivateKeyPath = TMP.'/keys/'.$host.'_id_rsa';
$tmpPublicKeyPath = TMP.'/keys/'.$host.'_id_rsa.pub'; 

//接続
$session = ssh2_connect($host, $port);

//鍵の実体化
file_put_contents($tmpPrivateKeyPath , $sshKey);

//キーファイルの権限を変更。 権限正しくないと次の公開鍵作成時に失敗する。
chmod($tmpPrivateKeyPath, 0600);

//公開鍵を作成
$result = exec("ssh-keygen -yf {$tmpPrivateKeyPath} > {$tmpPublicKeyPath}");

//認証
ssh2_auth_pubkey_file($session, $username, $pubkeyfile, $privkeyfile);

//不要なので鍵削除
unlink($tmpPrivateKeyPath);
unlink($tmpPublicKeyPath);


ssh2_auth_pubkey_fileには、実体の鍵ファイルが必要なので、file_put_contentsで実体化して、execでLinuxコマンドのssh-keygenで公開鍵を秘密鍵から作成している。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>