2015-08-15 94 views
1

我在Google Compute Engine中創建了一個實例,我需要使用SSHJ進行連接,但我沒有收到。我可以使用AWS成功連接:使用SSHJ連接到Google Compute Engine實例

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的控制檯並導入了公鑰。這樣我可以使用私鑰訪問膩子。

當嘗試使用上面定義的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 

任何建議?

+1

你得到的錯誤是什麼? –

+0

我對參數「keyPair」有疑問。對於AWS雲,我使用我的keyPair文件(.pem)的方式下載AWS控制檯。已經在Google Computer Engine上,我正在使用jclouds創建實例,並且他已經創建了一個用戶「jclouds」和ssh-rsa密鑰。我應該將ssh-rsa密鑰下載到本地機器上?如何做這個程序? –

回答

1

PuTTY .ppk密鑰不是PKCS#8格式。您的代碼正嘗試讀取PKCS#8密鑰對。嘗試將您的私鑰轉換爲PKCS#8,或者在您的代碼中使用不同的密鑰格式/方法,從SSHJ key provider list