《Maven官方文档》密码加密

原文链接   译者:carvendy

密码加密

  1. 介绍
  2. 怎么创建一个主密码
  3. 怎么加密服务端密码
  4. 怎么保持主密码可移动驱动器
  5. 提示

介绍

Maven 2.1.0以上现在支持服务密码加密。这个主要用例,给的解决方案是:

  • 多用户分享同样的构建机器(server,CI box)
  • 一些用户有特定上传的Maven工件到仓库,一些没有。
    • 这允许任何服务端操作,需要授权,不仅仅是发布。
  • setting.xml是分享给用户的。

实现的解决方案加入了一下能力:

  • 授权用户有一个额外的settings-security.xml在他们的==${user.home}/.m2==目录下
    • 这文件包含了加密的主密码,使用加密的其他密码
    • 或者他包含一个搬迁-引用其他文件,可能在可迁移的仓库
    • 现在,密码是通过CLI创建
  • 服务端的条目在settings.xml有密码或键仓库加密指令。
    • 目前 – 通过CLI做的之后,主密码已经被创建和存储在适当的地方

怎么创建主密码

使用下面的命令:

mvn --encrypt-master-password <password>

注意:自从Maven 3.2.1密码参数不在被使用(看提示获取更多信息)。Maven将提示密码。更早的版本不会提示密码,必须在明文命令行上键入。

这密码将尝试一个加密的密码,像这样:

{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}

存储密码在==${user.home}/.m2/settings-security.xml==;它应该像这样:

<settingsSecurity>
  <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>

当你做了这个,你可以开始加密已经存在的服务密码。

怎么加密服务端密码

你将使用下面的命令行:

mvn --encrypt-password <password>

注意:像== –encrypt-master-password ==的密码参数应该不能在Maven 3.2.1使用(看下面的提示获取更多信息)

命令将产生一个加密版本,像这样:

{COQLCE6DU6GtcS5P=}

粘贴到你的settings.xml文件在server部分。像这样:

<settings>
...
  <servers>
...
    <server>
      <id>my.server</id>
      <username>foo</username>
      <password>{COQLCE6DU6GtcS5P=}</password>
    </server>
...
  </servers>
...
</settings>

请注意密码可以包含花括号以外的任何信息,所以这样依旧可以:

<settings>
...
  <servers>
...
    <server>
      <id>my.server</id>
      <username>foo</username>
      <password>Oleg reset this password on 2009-03-11, expires on 2009-04-11 {COQLCE6DU6GtcS5P=}</password>
    </server>
...
  </servers>
...
</settings>

然后你可以使用,发布插件,写入到服务端

mvn deploy:deploy-file -Durl=https://maven.corp.com/repo \
                       -DrepositoryId=my.server \
                       -Dfile=your-artifact-1.0.jar \

怎么保持主密码可移动驱动器

创建明确的主密码像上面所描述的,存储它在一个可迁移的驱动,例如在OSX,我的USE驱动挂载到==/Volumes/mySecureUsb==,所以保存:

<settingsSecurity>
  <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>

在==/Volumes/mySecureUsb/secure/settings-security.xml==

和我创建的==${user.home}/.m2/settings-security.xml==的内容:

<settingsSecurity>
  <relocation>/Volumes/mySecureUsb/secure/settings-security.xml</relocation>
</settingsSecurity>

这保证加密只有在usb驱动器被操作系统挂载时才起作用。这地址使用方式是只有确定的人才有权限发布和发出这些设备。

提示

转义密码中的花括号文字(自从:Maven 2.2.0)

有时,你可能找到你的密码(或者加密过的密码)可能包含“{”或“}”作为字面值。如果加入一个密码到你的配置文件,你将发现Maven的奇怪事情。特别地,Maven将对于所有前面有“{”或者后面有“}”的字符,作为注释。很明显,在这种情况下,这不是你想要的行为。你需要准备的一种方式转义你密码的大括号。

在Maven 2.2.0 ,你可以使用“\”转义字符。如果你密码看起来像这样:

jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+{EF1iFQyJQ=

Then,你将加入到你的settings.xml像这样:

{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+\{EF1iFQyJQ=}

密码权限

编译 setting.xml 和 运行上面的命令可以让你的密码以纯文本存储在本地。你可能想检查地址:

  • 历史shell脚本(例如运行history)。你可能想清楚你的历史记录在你执行加密密码之后。
  • 编辑缓存(例如 ~/.viminfo

注意加密密码可以被一些人解密,有master密码和settings文件权限的人。保持文件保护(或分开存储),如果你可能会期望settings.xml文件可以被恢复。

密码在不同平台转义

在一些平台这可能很重要地去引用你的密码基于密码中特有的字符想==%!$==等。作为例子在Windows你必须关心的事:

下面例子在Windows将不起作用

mvn --encrypt-master-password a!$%^b

这样在Windows下才会起作用:

mvn --encrypt-master-password "a!$%^b"

如果你在linux/unix平台,你应该使用单引用上面的master密码,因为你将会惊讶使用master密码将不起作用(因为$符号和此外的!标记)

密码提示

在Maven 3.2.1以前你不得不给密码在密码作为参数输入,这意味着你可能需要转义你的密码。此外,shell存储所有命令的历史记录,因此任何有你电脑权限的就可以从shell历史获取密码。

在Maven 3.2.1密码是可选参数,意味着如果你省略密码,你将被提示防止上面的所有问题。 因此我们强烈推荐使用Maven 3.2.1 和避免转义特殊字符的问题和权限获取bash历史或者环境问题与密码的关系。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Maven官方文档》密码加密

  • Trackback 关闭
  • 评论 (0)
  1. 暂无评论

return top