2010-05-09 34 views
10

我使用SSH将我的Java构件部署到服务器。我设置了密钥,这样我就可以交互地SSH连接服务器而不需要密码,但是当我尝试运行“mvn deploy”或“mvn release:perform”命令时,它挂起(我认为是密码提示)。Maven不会使用公钥部署

我的~/.m2/settings.xml文件包含服务器的用户名(因为它与我的本地用户名不同),并引用需要不同用户的服务器的id

回答

8

您确定您的settings.xml提供了所需的一切吗?你是否声明你的privateKey(如果有必要,还有passphrase)?例如:

<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>server001</id> 
     <username>my_login</username> 
     <privateKey>${user.home}/.ssh/id_dsa</privateKey> 
     <passphrase>some_passphrase</passphrase> <!-- if required --> 
     <filePermissions>664</filePermissions> 
     <directoryPermissions>775</directoryPermissions> 
     <configuration></configuration> 
    </server> 
    </servers> 
    ... 
</settings> 
+0

我需要元素。这非常令人失望!为什么它不像mvn那样从我的Ubuntu keychain中读取密码? – magneticMonster 2010-05-09 02:03:51

5

在您的distributionManagement部分中,请尝试在您的url中使用“scpexe://”而不是“scp://”。

这调用了标准的scp程序(假设它在你的路径上),而不是使用Maven内置的scp的Java实现。标准scp使用ssh-agent(在Ubuntu中,当你通过GDM登录时自动启动)用于公钥验证。

+1

在这种情况下,您还需要使用'wagon-ssh-external'。 – 2012-09-04 20:02:49