2014-02-09 2 views
0

EC2 인스턴스를 ssh2 PHP 모듈과 연결하려고합니다.ssh2_auth_pubkey_file을 사용하여 PHP에서 EC2에 연결할 수 없습니다.

known_hosts 파일 (형식 : "ssh-rsa XXXX ..."public.txt "파일에 넣음)에서 공개 키를 가져 왔으며 개인 키로 amazon keypair.pem을 사용하고 있습니다 (" ----- 개인 RSA 프라이빗 키 ----- XXXX ... "private.pem).

$connection = ssh2_connect('XXXX.eu-west-1.compute.amazonaws.com', 22, array('hostkey'=>'ssh-rsa'));  
if(!ssh2_auth_pubkey_file(
    $connection, 
    'ubuntu', 
    'public.txt', 
    'private.pem' 
)) 
    die("Auth error"); 
$sftp = ssh2_sftp($connection); 

내가 오류는 다음과 같습니다 : ssh2_auth_pubkey_file() :

나는이 PHP 코드를 사용하고 있는데 어떻게 생각 유효하지 않은 사용자 이름/PublicKey의 조합

을 : 인증은 공개 키를 사용하여 우분투 실패 잘못하고있는거야?

답변

1

known_hosts 파일의 공개 키는 사용하고 있어야하는 공개 키가 아닙니다. 오히려 authorized_keys의 공개 키를 사용해야합니다.

즉, libssh2가 공개 키를 필요로한다는 사실은 바보입니다. 솔직히 말해서 phpseclib, a pure PHP SSH2 implementation, over libssh2을 사용하는 것이 좋습니다. 예.

<?php 
include('Net/SFTP.php'); 
include('Crypt/RSA.php'); 

$ssh = new Net_SFTP('www.domain.tld'); 
$key = new Crypt_RSA(); 
$key->loadKey(file_get_contents('private.pem')); 
if (!$ssh->login('username', $key)) { 
    exit('Login Failed'); 
} 

print_r($ssh->nlist()); 
?> 
+0

우리는이 방법으로 해결 – xspecial

+0

어떤 생각을 ssh2_auth_pubkey_file 공개 키를 요청하는 이유? 공개 키가 OpenSSH 형식이어야하는 이유는 무엇입니까? –

+0

@ bogdanioan.gabor - SSH의 작동 방식은 인증에 사용할 사용자 이름과 공개 키를 보내는 것입니다. 서버가이를 수락하면 서버가 공개 키로 서버를 확인할 수 있도록 개인 키로 무언가를 서명해야합니다. 그래서 libssh2가 공개 키를 요청할 때 개인 키에서 공개 키를 추출 할 수 없거나 해당 형식을 적절한 키로 변환 할 수 없기 때문입니다. – neubert

관련 문제