我在Google Compute Engine中创建了一个实例,我需要使用SSHJ进行连接,但我没有得到。我可以使用AWS成功连接:
public String exec(String host, String keyPair, String script) throws IOException{
File keyPairFile = new File(keyPair);
SSHClient ssh = new SSHClient();
ssh.addHostKeyVerifier(new PromiscuousVerifier());
ssh.connect(host);
PKCS8KeyFile keyFile = new PKCS8KeyFile();
keyFile.init(keyPairFile);
ssh.auth(USER_DEFAULT, new AuthPublickey(keyFile));
Session session = null;
try {
logger.info("Conectando via ssh " + host + "...");
session = ssh.startSession();
final Command command = session.exec(script);
String response = IOUtils.readFully(command.getInputStream()).toString();
command.join(10, TimeUnit.SECONDS);
return response;
} finally {
session.close();
ssh.disconnect();
ssh.close();
}
}
Google Compute Engine要做什么?
我使用puttygen创建了一个公钥和一个私钥。然后我访问了我的Google Compute Engine的控制台并导入了公钥。这样我可以使用私钥访问putty。
当我尝试使用上面定义的exec方法使用SSHJ访问时,会发生错误:
Exception in thread "main" net.schmizz.sshj.userauth.UserAuthException: Exhausted available authentication methods
at net.schmizz.sshj.userauth.UserAuthImpl.authenticate(UserAuthImpl.java:114)
at net.schmizz.sshj.SSHClient.auth(SSHClient.java:205)
at net.schmizz.sshj.SSHClient.auth(SSHClient.java:190)
at br.com.clouddeploy.service.SSHConnect.exec(SSHConnect.java:31)
at br.com.clouddeploy.main.TestConecte.main(TestConecte.java:17)
Caused by: net.schmizz.sshj.userauth.UserAuthException: Problem getting public key from PKCS8KeyFile{resource=[PrivateKeyFileResource] E:\Essencial\SkyDrive\MESTRADO\Disciplinas\2014 e 2015\EDD\Pesquisa\google-teste.ppk}
at net.schmizz.sshj.userauth.method.KeyedAuthMethod.putPubKey(KeyedAuthMethod.java:46)
at net.schmizz.sshj.userauth.method.AuthPublickey.buildReq(AuthPublickey.java:62)
at net.schmizz.sshj.userauth.method.AuthPublickey.buildReq(AuthPublickey.java:81)
at net.schmizz.sshj.userauth.method.AbstractAuthMethod.request(AbstractAuthMethod.java:63)
at net.schmizz.sshj.userauth.UserAuthImpl.authenticate(UserAuthImpl.java:92)
... 4 more
Caused by: java.io.IOException: Could not read key pair from: [PrivateKeyFileResource] E:\Essencial\SkyDrive\MESTRADO\Disciplinas\2014 e 2015\EDD\Pesquisa\google-teste.ppk
at net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile.readKeyPair(PKCS8KeyFile.java:145)
at net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile.getPublic(PKCS8KeyFile.java:72)
at net.schmizz.sshj.userauth.method.KeyedAuthMethod.putPubKey(KeyedAuthMethod.java:44)
... 8 more
有什么建议吗?
答案 0 :(得分:1)
PuTTY .ppk密钥不是PKCS#8
格式。您的代码正在尝试读取PKCS#8
密钥对。尝试将您的私钥转换为PKCS#8
或使用此SSHJ key provider list代码中的不同密钥格式/方法。