2016-07-07 150 views
1

我想生成專用和公用RSA密鑰,所以我可以將它傳遞給供應商並連接到他們的SFTP服務器。 我爲此使用phpseclib,但無論我創建什麼密鑰,供應商都會收到錯誤消息,說明輸入的SSH密鑰無效並且不受支持。請輸入有效的密鑰(安裝OpenSSH或的puttygen)phpseclib OpenSSH或PuTTYgen密鑰生成

我曾嘗試:

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

$rsa = new Crypt_RSA(); 

$rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PUTTY); 
$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_OPENSSH); 

//define('CRYPT_RSA_EXPONENT', 65537); 
//define('CRYPT_RSA_SMALLEST_PRIME', 982451653); // makes it so multi-prime RSA is used 
extract($rsa->createKey()); // == $rsa->createKey(1024) where 1024 is the key size 

echo $privatekey; 
echo "\n\n\n"; 
echo $publickey; 
?> 

這是例子產生的密鑰:

PuTTY-User-Key-File-2: ssh-rsa 
Encryption: none 
Comment: phpseclib-generated-key 
Public-Lines: 4 
AAAAB3NzaC1yc2EAAAADAQABAAAAgQDFkOp+otBkW4gkiNZ9xbWrWjzAok+iD+gc 
GESAyE3FLMFteQtJbpHlsix2eeBTCTjgPXiaRHABtzeqyr6nuO44uXLotJ4WVHOJ 
5G75QFWZL0j61LLWZmHB7oxF2Vdt7BFAINu/UbGAhBVRdBaNDRxKSW/10KToOC+b 
1yhEAR9MXw== 
Private-Lines: 8 
AAAAgEZ1qXvieynfjw1glAalFWZ4N0SIXpgwzhn++adoSHwyuwVc7w6QVY4y3jKe 
wsc6ecNXiQSTtdKW0k6iIh7VEHggCwMjVIi752jYhiV2wc2gSaP5PnjYyrRpsVb8 
JjXZToYeRvWNvNPh4aS4x3CTSpB4BLcZ+7V451bNUy84XIM5AAAAQQDm+1RLu5o3 
NmUazpJT3a/KpEtfO5Fg4RuBgFu0dXM6+lfueFUMxpVJ1JY1eWRtCD7gr0EqYC3U 
HtNxuOoBk1pdAAAAQQDa9wkbrpQparL9GAoqWU4rP2bjBZ9Nd6fVozswgzGU4cUx 
nuxvirPdQfwBAKk8czSH1bY64NVfNF8nhNXCTS3rAAAAQC3Sse80v03IRDg/gT29 
VDeCj0P7chs7A0yQ3i4O/jf+s76hBGmpnif1bkkXENfue3Rswxsbq7CVy6Tww7W1 
BFk= 
Private-MAC: 89412f0a7977af0b8bd29bb67522628b4ab49ca8 



ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDFkOp+otBkW4gkiNZ9xbWrWjzAok+iD+gcGESAyE3FLMFteQtJbpHlsix2eeBTCTjgPXiaRHABtzeqyr6nuO44uXLotJ4WVHOJ5G75QFWZL0j61LLWZmHB7oxF2Vdt7BFAINu/UbGAhBVRdBaNDRxKSW/10KToOC+b1yhEAR9MXw== phpseclib-generated-key 

我在做什麼錯?

+0

這真的不是編程相關的問題,而是你發送給他們的哪一部分? – Devon

+0

公鑰因爲我將連接到他們的服務器。我應該向他們發送私鑰嗎? – Petrik

+0

不,公鑰是正確的,但沒有說明。 – Devon

回答

0

PuTTY鍵的底部有一個Private-MAC部分,您沒有。 phpseclib生成的PuTTY鍵具有這一部分。我的代碼:

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

$rsa = new Crypt_RSA(); 
$rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PUTTY); 

extract($rsa->createKey()); 

echo $privatekey; 

輸出:

PuTTY-User-Key-File-2: ssh-rsa 
Encryption: none 
Comment: phpseclib-generated-key 
Public-Lines: 4 
AAAAB3NzaC1yc2EAAAADAQABAAAAgQC61/qDBnv1Fhz7QUe5Bq9gBrUlS/sJZxiv 
CR5/a1ZlaTbb+V9ayK/f/7YvF/m9OnLE8qVQPdrGQ511xdk9WSO5LABNLReOIT/t 
ylbtM17Cl3If5BHm1jXK5Edxi5GPdOTfI3UJ2puoGsOxunKtDKflbbkIvPyoV/BJ 
W5+bZE6Jgw== 
Private-Lines: 8 
AAAAgELxiS8SzqzkTGP1YrY3X/R+0r5XN82Jo71q/gNXOPBCv0YXVgPX7bPLEcJT 
y8XxwBcyfOqADveEWFFPHuOtIW/lSui1WxXxxyhP3L+0Utt9SzhW8PKeciAAJjLg 
EzvQT/njSsPL9dFkfci6Ayc6cilvodCWhuJO74b8FPpqHQ15AAAAQQDcsrV3p5Du 
mFJ9fNvu3yer8poBaAU5QqsKgyMl7rnEnExEfIbo0utVUh2GYHeHRFJbTpErm8ia 
+IgV3Mo50OCVAAAAQQDYuvoI7jbRltk/YvwjS1+nE+BaHlArnF5wQwZiKvxJxSzo 
lF8nn+HTRBo9eGflCCBN5ZX4liq3VUFN1Eb/m0O3AAAAQQCNlBIwB1SorqE/7M8G 
VfJaJZScayO8HUSFGDk6ufXV0HquvaRIUGKEuezoTZU/tru+Q9CRMomSH3gFLrUj 
f7s8 
Private-MAC: e00a2fc04cf1d1acfa0f148d606f0d590e90f844 

該密鑰將打開的puttygen就好了。

我的猜測是:你要麼做了錯誤的密鑰複製/粘貼,意外省略了一部分密鑰,這會阻礙我們協助你的能力,或者......你正在使用修改後的phpseclib版本刪除Private-MAC行。

我的意思是,我甚至不認爲過時的版本的phpseclib會解釋該行的遺漏,因爲我認爲每個版本的phpseclib都包含該行。

+0

嗨,對不起,我在我的文章(現在編輯)中跳過了私人MAC。然而,由於我只是將該產品發送給供應商,因此公鑰被拒絕。 – Petrik

+0

我現在可以在puttygen中打開你的鑰匙。我把你的公鑰放在我的authorized_keys文件中,並且能夠用你的私鑰很好地連接到機器上。你說「供應商收到錯誤信息」。你的供應商是什麼?如果我能夠使用您發佈的密鑰與PuTTY一起登錄,那麼我認爲您的供應商出現問題。 PuTTY是PuTTY格式的事實上的權威,如果PuTTY喜歡這個密鑰,而您的供應商不這麼做......那麼您的供應商可能不像PuTTY那麼多。甚至OpenSSH,因爲OpenSSH也喜歡公鑰。 – neubert