【发布时间】:2011-02-13 13:49:48
【问题描述】:
可以将 Maven Wagon 插件配置为使用 ssh/scp 的私钥吗?我尝试过的一切仍然让 maven 在 scp-ing 的时候向我询问密码。
【问题讨论】:
可以将 Maven Wagon 插件配置为使用 ssh/scp 的私钥吗?我尝试过的一切仍然让 maven 在 scp-ing 的时候向我询问密码。
【问题讨论】:
您应该能够在 settings.xml 的 server 元素中指定私钥的路径:
下载和存储库 部署由定义
repositories和distributionManagement元素 POM。但是,某些设置 比如用户名和密码应该 不随 pom.xml。这类信息 应该存在于构建服务器上 settings.xml。<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> <password>my_password</password> <privateKey>${user.home}/.ssh/id_dsa</privateKey> <passphrase>some_passphrase</passphrase> <filePermissions>664</filePermissions> <directoryPermissions>775</directoryPermissions> <configuration></configuration> </server> </servers> ... </settings>
- id:这是 服务器(不是登录用户) 匹配的 id 元素 Maven 尝试的存储库/镜像 连接到。
- 用户名、密码:这些元素显示为一对,表示登录名和密码 需要对此进行身份验证 服务器。
- 私钥, passphrase:与前两个元素一样,这对指定了一个路径 到私钥(默认为
${user.home}/.ssh/id_dsa)和一个 密码(如果需要)。这 密码短语和密码元素可能 在未来被外部化,但对于 现在它们必须在 settings.xml 文件。- filePermissions、directoryPermissions:当存储库文件或目录被 在部署时创建,这些是 使用权限。法律价值 每个是一个三位数字 对应 *nix 文件 权限,即。 664 或 775。
注意:如果您使用私钥 登录到服务器,请确保您 省略
<password>元素。 否则,该键将被忽略。密码加密
一项新功能 - 服务器密码和 添加了密码短语加密 到 2.1.x 和 3.0 中继线。查看详细信息 在this page.
特别注意“注意”:如果您使用私钥登录服务器,请确保省略<password> 元素。否则,key会被忽略。所以最终的配置会接近:
<settings>
...
<servers>
<server>
<id>ssh-repository</id>
<username>your username in the remote system</username>
<privateKey>/path/to/your/private/key</privateKey>
<passphrase>sUp3rStr0ngP4s5wOrD</passphrase><!-- if required -->
<configuration>
...
</configuration>
</server>
</servers>
...
</settings>
【讨论】:
我知道这是一个旧线程,但看起来 Wagon 插件正在读取 settings.xml(例如用户名)但没有使用所有设置。我无法让它在 scp 期间停止询问 Kerberos 用户名/密码。 (看起来可能在 2016 年末对插件进行了更改,这会影响到这一点。) 只需添加此答案以防对其他人有帮助。
对我来说,解决方案更简单:完全跳过使用“settings.xml” 并简单地为协议指定'scpexe'而不是'scp'(如在pom.xml的distributionManagement部分下)。然后,这将使用您机器的默认 SSH 配置(~/.ssh 下的 unix 设置)。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>upload-to-server</id>
<phase>deploy</phase>
<goals><goal>upload-single</goal></goals>
<configuration>
<fromFile>file-to-upload</fromfile>
<url>scpexe://username@serverName/dirname-to-copy-to
<toFile>file-to-upload</toFile>
</configuration>
</execution>
</executions>
</plugin>
【讨论】:
org.apache.maven.wagon:wagon-ssh 进行私钥身份验证,但未成功。 org.apache.maven.wagon:wagon-ssh-external 工作就像一个魅力。
我今天想与 maven-site-plugin (3.9.1) 一起做同样的事情,并且还遇到了一些障碍(特别是 wagon-ssh 插件坚持要求我提供我的 Kerberos 用户名和密码)。 wagon-ssh-3.4.3 最终对我有用:
<!-- add scp support for mvn site:deploy -->
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>3.4.3</version>
</dependency>
在settings.xml中:
<server>
<id>ssh-repository</id>
<username>pridkdev</username>
<privateKey>${user.home}/.ssh/pridkdev.ppk</privateKey>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration>
<interactive>false</interactive>
<strictHostKeyChecking>no</strictHostKeyChecking>
<preferredAuthentications>publickey</preferredAuthentications>
</configuration>
</server>
我想最重要的是<configuration> 块,尤其是<preferredAuthentications> 设置。
【讨论】: