2017-02-23 95 views
0

我正在嘗試使用maven構建一個jar並自動將其scp到遠程機器。Maven ssh使用密碼部署,權限被拒絕

這是我的pom.xml

<properties> 
    <deploy.username>root</deploy.username> 
    <deploy.host>10.10.4.10</deploy.host> 
    <deploy.port>22</deploy.port> 
    <deploy.dir>/root</deploy.dir> 
</properties> 

<distributionManagement> 
    <repository> 
     <id>repo1</id> 
     <url>scpexe://${deploy.host}:${deploy.dir}</url> 
    </repository> 
</distributionManagement> 

這是我的settings.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
    <servers> 
    <server> 
     <id>repo1</id> 
     <username>root</username> 
     <password>root</password> 
    </server> 
    </servers> 
</settings> 

此錯誤日誌

Caused by: org.eclipse.aether.transfer.MetadataTransferException: Could not transfer metadata com.github.rssanders3.spark:spark_quick_start:1.0-SNAPSHOT/maven-metadata.xml from/to repo1 (scpexe://10.10.4.10:/root): Exit code: 1 - Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 

    at org.eclipse.aether.connector.basic.MetadataTransportListener.transferFailed(MetadataTransportListener.java:43) 
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:355) 
    at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67) 
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:581) 
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:222) 
    at org.eclipse.aether.internal.impl.DefaultDeployer.upload(DefaultDeployer.java:417) 
    ... 28 more 
Caused by: org.apache.maven.wagon.TransferFailedException: Exit code: 1 - Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 

你可以看到Maven的全力輸出-X in here

我使用下面的命令提交:

mvn deploy -DskipTests --settings settings.xml 

的用戶名和密碼是正確的,我可以ssh到它使用此憑據。我甚至試圖將文件scp到遠程沒有任何問題。

我檢查maven調試輸出,它正在加載我創建的用戶定義settings.xml。

[DEBUG] Reading user settings from /Users/xuanyue/tmp/apache-spark-quickstart-project/settings.xml 

而上的SSH服務器端,這是我唯一得到的:

Feb 23 14:33:02 hadoop10 sshd[23804]: Connection closed by 192.168.100.26 

我也試圖與SCP取代scpexe。仍然沒有工作。

+0

遵循URI標準..你的連接應該不是'scpexe:// $ {deploy.host}/$ {deploy.dir}'? –

回答

0

嘗試使用-X選項運行它:

mvn -X deploy -DskipTests --settings settings.xml 

我懷疑問題可能與在另一側的用戶及其權限(不一定是文件系統權限)來完成。

0

首先,您可以在服務器上使用-v(或-vvv進行全面調試)重新啓動sshd,從而在安全文件中獲取更多日誌。

另外,它看起來我是你試圖在服務器上scp,你有沒有試過使用插件org.apache.maven.wagon

見Thivent先生的帖子:Uploading a File via SCP with Maven fails

+0

是的,我正在使用旅行車,版本是1.0-beta-6 ..您指出的版本相同。但它不顯示如何使用密碼進行配置。 – xuanyue

+0

當你第一次通過SSH登錄時,它是否要求你添加一個RSA密鑰?我的意思是第一次使用您正在使用的筆記本電腦。 – Adonis

+0

在settings.xml中,您可能想要在配置中嘗試兩件事: 1.在服務器部分中使用filePermissions/directoryPermissions請參閱http://maven.apache.org/plugins/maven-deploy-plugin /examples/deploy-ssh-external.html 2.嘗試禁用服務器端的主機檢查,請參閱:http://stackoverflow.com/questions/2685988/how-to-avoid-maven-builds-在ssh-host-authenticity-stall/stall上的問題/ 2687946#2687946 – Adonis

0

你可能需要Maven的旅行車提供了SSH。請注意,它必須作爲構建擴展添加。

<project> 
    ... 
    <build> 
    <extensions> 
     <extension> 
     <groupId>org.apache.maven.wagon</groupId> 
     <artifactId>wagon-ssh</artifactId> 
     <version>2.10</version> 
     </extension> 
    </extensions> 
    </build> 
    ... 
</project> 
由於您使用Maven貨車的一個古老的版本

如果你有這樣的旅行車提供,則故障可能是(你提到的1.0版-β-6),這可能與匹配古老的版本很好地工作(但肯定不會與現代的maven-dist-plugin合作)。

無需使用Maven Wagon SSH的Beta版本。 The current version as of now is 2.10.

同樣,我不相信你需要包含Maven Wagon Plugin as the maven-dist-plugin doesn't use that plugin,它直接使用更現代的wagon-provider-api。你應該只需要SSH Wagon擴展。

最後,你應該爲測試運行遠程sshd例如,在命令行(這樣的信息涉及到終端)有足夠的調試,以確定如果你到達測試盒,如果你實際上傳遞有效的憑據(如sshd認爲它們)。

重要的是要記住,sshd具有特定的配置選項,如果它們被設置,它們將拒絕root登錄。如果您有權訪問遠程sshd框,則可能還需要驗證sshd設置。

+0

我現在升級到2.10,但問題仍然存在。我使用調試選項在另一個端口上打開一個新的ssh守護進程。此鏈接顯示http://pastebin.com/6252TuYy上的sshd日誌。奇怪的是,它沒有顯示任何失敗*除了嘗試使用公鑰。但我使用密碼和用戶名。而這些字在日誌中還不存在。在sshd_config中,允許root登錄並允許登錄密碼... – xuanyue

+0

因此,通過調試,您應該可以看到您的服務器通告了允許的身份驗證策略,並清楚地通告了可用的身份驗證策略。通常,大多數系統嘗試更好的策略,然後回退到其他不太理想的策略,密碼將接近列表的末尾。我假設你可以用普通的ssh命令手動登錄,所以它不是服務器的問題。賠率是你的客戶不是廣告,它可以處理密碼策略,或者你的服務器廣播它不受支持。 –