

PHPのssh2_auth_pubkey_file関数を使用して公開鍵認証を行いたいのですが、  
以下のメッセージが出力され認証できず、困っています。  
ここが原因ではないかといったアドバイス等があればよろしくお願い致します。

[code]

    $connection = ssh2_connect($host, $port);
    if (!$connection) {
       // 接続失敗
    }
    
    $user = 'user';
    $pubKey = '/home/user/.ssh/authorized_keys';
    $priKey = '../id_rsa';
    
    if (!ssh2_auth_pubkey_file($connection, $user, $pubKey, $priKey)) {　←★ここでエラー
       // 認証失敗
    }
    
[/code]

> Warning Error: ssh2_auth_pubkey_file(): Authentication failed for user using
> public key: Unable to open public key file

以下に公開鍵を配置しており、各パーミッションはuserが755、.sshが700、authorized_keysが600です。  
/home/user/.ssh/authorized_keys

※TeraTeamからは公開鍵認証できています。


CC BY-SA 4.0
2022-12-23T01:01:45.290
92968
2022-12-25T15:09:34.343
55476
question
php ssh scp
公開鍵認証時のエラーについて


PHP が Apache 等の web
サーバの権限で動作している場合には、ユーザーのホームディレクトリ配下のファイルはアクセス権限の関係で読み取れていない可能性があります。

web サーバの動作ユーザー/グループは環境によって異なりますが、www-data, httpd, apache, nginx 等になります。

公開鍵を上記のユーザーがアクセスできる場所に配置するか、もしくは元のファイルに対して上記ユーザー/グループでアクセスできるように権限を付与する必要があります。

**参考:**  
[ssh2_auth_pubkey_file authentication always fails - Stack
Overflow](https://stackoverflow.com/q/23880078/2322778)


CC BY-SA 4.0
2022-12-23T01:53:33.310
92969
2022-12-23T01:53:33.310
3060
92968
answer


> $pubKey = '/home/user/.ssh/authorized_keys';  
>  $priKey = '../id_rsa';

ssh2_auth_pubkey_fileの3番目の引数には、公開鍵認証で使用する公開鍵ファイルを指定します。  
authorized_keysはサーバー上に置く物であって、通常はクライアント側には無いファイルですよね?  
id_rsaを生成した時に対となる公開鍵ファイルid_rsa.pubが生成されているはずなので、(クライアント側に有る)そのファイルを指定してください。  
id_rsa.pubが無い場合は、以下のコマンドで秘密鍵ファイルから再生成できます。

[code]

    ssh-keygen -y -f id_rsa > id_rsa.pub
    
[/code]


CC BY-SA 4.0
2022-12-25T15:09:34.343
93007
2022-12-25T15:09:34.343
12203
92968
answer