Witam, nie wiedziałem za bardzo pod który dział podpiąć problem, pod PHP czy pod Serwery www, ale spróbuje tutaj.
Próbuję wysłać 6 plików na serwer SFTP.
Autoryzacja do tego serwera odbywa się za pośrdenictwem privateKeya i hasła.
Za cholerę ssh2_connect czy nawet biblioteka phpseclib nie może połączyć się z serwerem. Nie autoryzuje mi połączenia lub nie akceptuje mi pliku klucza i robi inne dziwne kwiatki. Natomiast w konsoli używając:
łączy się normalnie.
sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host
Jak puszczę go w konsoli ./doit.sh wykonuje się prawidłowo...i wszystkie 6 plików wysyłane są na serwer poprawnie, następuje rozłączenie z serwerem.
#!/usr/bin/expect spawn sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host expect "Enter passphrase for key 'privateKey.pem'" send "password\n" expect "sftp>" send "lcd /var/www/html/STIR/upload/03012019/\n" expect "sftp>" send "lpwd\n" expect "sftp>" send "cd /var/www/html/server/EXPORT/STIR/\n" expect "sftp>" send "put file1.TXT\n" expect "sftp>" send "put file1.TXT.SEM\n" expect "sftp>" send "put file2.TXT\n" expect "sftp>" send "put file2.TXT.SEM\n" expect "sftp>" send "put file3.TXT\n" expect "sftp>" send "put file3.TXT.SEM\n" expect "sftp>" send "bye\n" interact
Po wypluciu sobie echo $make; w przeglądarce, mogę zaobserwować że skrypt jest zatrzymywany w trakcie kopiowania 2 ostatnich plików...log kończy się na 54% przesyłania pliku...
$make = http://www.php.net/shell_exec("./doit.sh");
co do PHP to widziałeś to? https://stackoverflow.com/questions/13064681/php-ssh2-auth-pubkey-file-not-working-with-encrypted-private-key
Ew. Przekonwertuj sobie ten klucz na pub i priv a potem normalnie http://php.net/manual/en/function.ssh2-auth-pubkey-file.php
Dzięki za szybką odpowiedź, oczywiście że konwertowałem. Dostałem nawet plik pkk i musiałem posiłkować się PuttyGenem to uzyskania z tego klucza prywatnego i publicznego, ale żadną z typowych metod nie potrafiłem się połączyć.
Miałem zwrotkę taką samą jak kolega czyli ssh2_auth_pubkey_file(): Authentication failed for username using public key
$connection = ssh2_connect($host, $port); ssh2_auth_pubkey_file($connection, $username, $pubKey, $privKey, $passphrase);
wypluwa nie
if ($sftp->login('username', $key)) { http://www.php.net/echo 'tak'; } else { http://www.php.net/echo 'nie'; }
1. Sprawdzałeś czy idzie się połączyć z sftp przy uzyciu klucza publicznego? (zestaw z konwersji)
2. czy w phpseclib używałeś tego klucza pem?
Przy zapodaniu
Pyta o hasło, ale po wpisaniu nie wchodzi, jakby nie poprawne hasło, ale
sftp -oIdentityFile=publicKey.pub -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host
wpuszcza normalnie....
sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host
Nie wchodzi bo musisz podać klucz prywatny zamiast publiczny (w sensie ten prywatny powstały z przekonwertowania pary pem.)
Dobrze Cię zrozumiałem,mam ten privateKey.pem jeszcze przekonwertować na private i public?
Czy chodzi Ci o to aby z privateKey.pem wyłuskać klucz publiczny coś typu
openssl rsa -in privateKey.pem -pubout czy ssh-keygen -y -f privateKey.pem czy ssh-keygen -i -m privateKey.pem -f public-http://www.php.net/key.pem czy ssh-keygen -y -f privateKey.pem > public-http://www.php.net/key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9kfwanzIXJ4BAgd3myWoeSDDGprDNSTYalJ+RON4AYCjiGeDu0sOnjqVtoWMRxQ820kvsv4iUMnXsTrewyklCNLsyUNt62htuvyvcVLSHtLqJFkBXrhg
ncF7+SEXiakQivYD50EifpU4ZlMGN/LzwQ40zRa4uXQyaGH16ifxPtggKjfaVNKXqfsdkUJ7JlnP6VlLV3pQM/ckLHIWB9FtMWDB1fHirqwjJEZAC04ez4askDtP4jUMcfYtQOynbZuRCB33qLf2GvWpafmaC83m7i53ee
34MuOAixk6HOwXwTzTc8wVwPndSXSjtAGRQ/ScjQ3dpSWLhZ7lFGUe/viwN imported-openssh-http://www.php.net/key
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)