2017-02-23 87 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命令手动登录,所以它不是服务器的问题。赔率是你的客户不是广告,它可以处理密码策略,或者你的服务器广播它不受支持。 –