2016-07-07 158 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