2017-07-28 57 views
0

在多模塊Scala項目中,我運行了幾個集成測試,我使用scala-ssh(v。0.8)通過SSH連接到遠程計算機並從那裏傳輸文件。在sbt會話中不允許多個SSH連接

如果我運行在sbt會話集成測試一次,一切正常 - 我可以連接到本機和下載的任何文件。的Scala代碼的相關位是:如果我嘗試運行相同的sbt會話中相同的測試(或其他集成測試)發生

private lazy val fileInventory: AnsibleYamlFileInventory = { 
    val inventory = SSH(ansibleHost, HostResourceConfig()) { client => 
     client.fileTransfer { 
     scp => 
      val tmpLocalFile = Files.createTempFile("inventory", ".yaml") 
      scp.download(remoteYamlInventoryFile, tmpLocalFile.toAbsolutePath.toString) 
      new AnsibleYamlFileInventory(tmpLocalFile) 
     } 
    } 

    inventory.fold(s => throw new RuntimeException(s), identity) 
} 

的問題。我得到同樣的錯誤消息中提到here

14:32:11.751 [reader] ERROR net.schmizz.sshj.transport.TransportImpl - Dying because - {} 
net.schmizz.sshj.common.SSHRuntimeException: null 
     at net.schmizz.sshj.common.Buffer.readPublicKey(Buffer.java:432) 
     at net.schmizz.sshj.transport.kex.AbstractDHG.next(AbstractDHG.java:75) 
     at net.schmizz.sshj.transport.KeyExchanger.handle(KeyExchanger.java:367) 
     at net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:509) 
     at net.schmizz.sshj.transport.Decoder.decode(Decoder.java:107) 
     at net.schmizz.sshj.transport.Decoder.received(Decoder.java:175) 
     at net.schmizz.sshj.transport.Reader.run(Reader.java:60) 
Caused by: java.security.GeneralSecurityException: java.security.spec.InvalidKeySpecException: key spec not recognised 
     at net.schmizz.sshj.common.KeyType$3.readPubKeyFromBuffer(KeyType.java:156) 
     at net.schmizz.sshj.common.Buffer.readPublicKey(Buffer.java:430) 
     ... 6 common frames omitted 
Caused by: java.security.spec.InvalidKeySpecException: key spec not recognised 
     at org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic(Unknown Source) 
     at org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi.engineGeneratePublic(Unknown Source) 
     at java.security.KeyFactory.generatePublic(KeyFactory.java:334) 
     at net.schmizz.sshj.common.KeyType$3.readPubKeyFromBuffer(KeyType.java:154) 
     ... 7 common frames omitted 

如果我殺了那個sbt會議並重新啓動一個又一個,問題重新出現之前,我可以再次運行只有一個單一的集成測試。

我已經按照建議安裝了JCE 8文件。所以,我想知道我需要解決什麼問題,以便讓多個測試成功運行,並且可以一個接一個地將ssh傳入該遠程計算機。

+0

請編輯您的問題,包括您正在運行的代碼以及包含堆棧跟蹤在內的確切錯誤。不要鏈接到一些github頁面,並讓人們猜測你得到的錯誤。 – Kenster

+0

@Kenster,感謝您的評論 - 我更新了這個問題。 – xeroqu

回答

0

經過一些調試後,我發現問題是由BouncyCastle引起的,後者在後續測試中仍然被註冊爲JCE提供程序並導致問題。

INFO net.schmizz.sshj.common.SecurityUtils - BouncyCastle already registered as a JCE provider 

我決定增加一個security provider dynamically,並刪除它的測試完成後:這在堆棧跟蹤顯示出來。

def doTests(): Unit = { 

    import org.bouncycastle.jce.provider.BouncyCastleProvider 
    import java.security.Security 

    Security.addProvider(new BouncyCastleProvider) 

    "Some test" should { 
    "be BLABLA" in { 
     assert(...) // some test 
    } 
    } 

    "Some other test" should { 
    "be BLABLABLA" in { 
     assert(...) // some other test 
    } 
    } 

    Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME) 
}