I am trying to connect via php curl on an SFTP destination, with key authentication.
I manage to connect outside of curl, with openSSH: ( it work )
sftp -i myPrivateKey sftp://myusername@destination.com
however, I cannot reproduce this connection in curl, I have an authentication failure error. how is that possible?
$dest = 'sftp://myusername@mydestination:22';
$curlHandler = curl_init();
curl_setopt($curlHandler, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curlHandler, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curlHandler, CURLOPT_URL, $dest);
curl_setopt($curlHandler, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($curlHandler, CURLOPT_VERBOSE, true);
curl_setopt($curlHandler, CURLOPT_SSH_PUBLIC_KEYFILE, mypublickey);
curl_setopt($curlHandler, CURLOPT_SSH_PRIVATE_KEYFILE,myprivatekey);
$resp = curl_exec($curlHandler);
log:
* SSH public key authentication failed: Callback returned error
* Failure connecting to agent
* Authentication failure
* Closing connection 0
I am sure of the validity of the keys, I checked the fingerprints with the remote server, and I manage to connect outside of php-curl.
I also checked that my keys were in restricted access and accessible
Finally, it turns out that ubuntu LTS 14 uses the libgcrypt utility, which creates SSH keys with private keys starting with" ----BEGIN OPENSSH ---" and in the case of SFTP, we need a .pem starting with "-----BEGIN RSA PRIVATE KEY-----", so I converted my private key, and it worked
ssh-keygen -f id_rsa -m pem -p