如何在Maven的settings配置文件中对服务器密码进行加密?

前情提要

在上篇文章中,我们详细的介绍了Maven配置文件settings.xml各个标签的含义以及配置方法(乾坤挪移大法——转移!),在讲解servers标签时,需要配置服务器的用户名和密码,有的同学就不想让自己的密码以明文形式暴露在settings文件中,怎么办呢?其实我们可以将加密后的密码写到settings配置文件中。

<servers>
  <server>
    <id>my-server</id>
    <username>my-username</username>
    <password>{加密后的密码}</password>
  </server>
</servers>

这时候就会有同学提问了:加密之后服务器岂不是还要解密?而且这有啥用?密码不就是换了个皮囊??
哎呦还真不是这样的,听我慢慢道来。

双密码策略

在Maven中采用了双密码策略,有一个主密码以及一个服务器密码,这两个密码都是进行加密的,Maven会使用主密码去解密服务器密码,然后才能下载依赖包。主密码可以存储到其他文件中,当然也可以存储到U盘等移动介质中,这样只有得到U盘等移动介质的人才能访问私服。

第一步:生成主密码

  1. 在以管理员身份启动的cmd等终端中执行命令:mvn --encrypt-master-password <password>,其中<password>是你的主密码,从Maven 3.2.1开始,不应使用<password>参数,这样会使密码明文暴露在历史命令中,可以直接使用mvn --encrypt-master-password命令,然后敲下回车,会提示你输入主密码,加密完成后会返回加密后的密码,类似这样:{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}
  2. 这个密码应该存储在${user.home}/.m2/settings-security.xml中,或者是其他目录,存储形式如下,注意密码要加大括号,以便于Maven识别这是一个加密密码:
    <settingsSecurity>
      <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
    </settingsSecurity>
    

也可以使用下面的形式在${user.home}/.m2/settings-security.xml文件中指定主密码文件的位置:

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

其中:/Volumes/mySecureUsb/secure/settings-security.xml是存有主密码的文件settings-security.xml的位置,这样就可以将存有主密码的文件settings-security.xml放到移动介质中,而settings文件完全可以分发给其他人,只有得到了移动介质的人才可以解密服务器密码从而访问私服。

第二步:加密服务器密码

  1. 使用以管理员身份启动的终端执行命令:mvn --encrypt-password <password>,同样的,可以直接使用mvn --encrypt-password命令,然后敲下回车,会提示你输入服务器密码,加密完成后会返回加密后的密码,类似这样:{COQLCE6DU6GtcS5P=}
  2. 将加密后的密码写入到settings配置文件中,注意密码要加大括号,以便于Maven识别这是一个加密密码:
<settings>
...
  <servers>
...
    <server>
      <id>my.server</id>
      <username>foo</username>
      <password>{COQLCE6DU6GtcS5P=}</password>
    </server>
...
  </servers>
...
</settings>

小知识

如果加密后的密码存在{或者},如:jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+{EF1iFQyJQ=,这时候就需要对{}进行转义,转义后存入settings文件时是这样子的:{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+\{EF1iFQyJQ=}
servers标签下也可以使用privateKeypassphrase标签指定私钥进行验证:

<servers>
  <server>
    <id>my-ssh-server</id>
    <username>your_username</username>
    <privateKey>/path/to/your/private_key</privateKey>
    <passphrase>{mvn-encrypted}YourEncryptedPassphrase</passphrase>
  </server>
</servers>
  • <id> 元素指定了服务器的唯一标识符。
  • <username> 元素指定了连接到服务器时使用的用户名。
  • <privateKey> 元素指定了私钥文件的路径。这可以是绝对路径或相对于用户主目录的路径。
  • <passphrase> 元素(可选)指定了加密的私钥密码,如果你的私钥有密码保护的话。
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mavensettings配置文件是用于配置Maven构建工具的设置和参数的文件。在Maven项目,该文件通常命名为settings.xml,并位于Maven安装目录的conf文件夹Mavensettings配置文件包含了一些重要的配置项,用于指定Maven的本地仓库路径、远程仓库的URL、验证信息、代理服务器设置、镜像仓库等。通过编辑这个文件,我们可以定制化Maven的各种行为。 首先,Mavensettings配置文件用于指定Maven的本地仓库路径。本地仓库是Maven用于存储下载的依赖库和插件的地方,可以通过设置<localRepository>元素来指定本地仓库的路径。 另外,远程仓库的配置也是Mavensettings配置文件的一部分。其,<repositories>元素用于指定Maven从哪些远程仓库下载依赖库。我们可以在<repositories>元素下使用<repository>子元素来配置远程仓库的URL和其他相关信息。 Mavensettings配置文件还可以用来存储验证信息,如开发者的用户名和密码。这些凭据可以用于访问受身份验证保护的远程仓库或发布构件到远程仓库。我们可以使用<servers>元素来设置验证信息。 此外,Mavensettings配置文件还支持设置代理服务器,以便在Maven访问远程仓库时使用代理。可以通过<proxies>元素来配置代理服务器的信息。 最后,我们还可以使用<mirrors>元素来设置镜像仓库。镜像仓库可以加速构建过程,通过设置<mirrors>元素,我们可以指定一个可用的镜像仓库来替代默认的央仓库。 综上所述,Mavensettings配置文件是一个非常重要的配置文件,对于定制化Maven构建工具非常有用。通过编辑这个文件,我们可以指定本地仓库路径、远程仓库的URL、验证信息、代理服务器设置、镜像仓库等,从而使Maven按照我们的要求进行构建工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值