
# 获取长期有效的登录或推拉镜像指令
#### 操作场景
使用容器引擎客户端推送或拉取镜像前，需要先连接镜像仓库。连接方式分为临时登录指令和长期登录指令。
- 临时登录指令：临时登录指令过了用户设置的有效时间后会过期，提示过期后，需要重新生成登录指令，适用于偶尔的推送或拉取操作。
- 长期有效指令：永久有效，适用于需要持续集成、自动化部署等长期运维场景。
根据您使用的容器引擎客户端不同，连接镜像仓库的方式也有所差异：
- **Docker容器引擎客户端：** 需要长期推送或拉取镜像时，使用[获取docker容器引擎长期有效登录指令]来登录容器镜像仓库。偶尔推送或拉取镜像时，使用临时登录指令即可。
- **Containerd容器引擎客户端：** 需要长期推送或拉取镜像时，使用[获取containerd容器引擎长期有效的拉取、推送镜像指令]来访问容器镜像仓库。
![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/caution_3.0-zh-cn.png)
Docker容器的长期登录指令以及containerd容器的长期推送/拉取指令，请您务必保管，防止信息泄露。
临时登录指令过了用户设置的有效时间后会过期。
#### 登录方式分类
为与IAM新平面更好地兼容，SWR新增了**增强型指令** ，与之前的**通用型指令** 进行区分。增强型指令简化了权限控制，完全支持IAM权限管理，去掉了冗余的SWR自有镜像权限控制，使镜像推送、拉取的控制更加便捷。两者的详细区别请参见[下表]：
 表1通用型指令和增强型指令对比 
| 差异       | 通用型登录指令                                                                                                                                                                                                                                  | 增强型登录指令                                                                                                                                                                                            |
|:---|:---|:---|
| 适用范围     | 无限制                                                                                                                                                                                                                                      | 开启了IAM新平面才支持，适用使用IAM新平面进行权限控制的场景                                                                                                                                                                   |
| 指令有效期    | 支持临时登录指令和长期登录指令，具体差异请参见[长期有效的登录指令与临时登录指令的区别是什么？](https://support.huaweicloud.com/swr_faq/swr_faq_0015.html#section1)                                                                                                                     | 为了安全考虑，不再支持长期登录指令，仅支持临时登录指令，其有效期为24小时。                                                                                                                                                             |
| 权限控制     | 支持IAM权限管理，详细内容请参见[通过IAM授予使用SWR的权限](https://support.huaweicloud.com/usermanual-swr/swr_01_0073.html)， 支持SWR自有的镜像权限控制（即本地授权），详细内容请参见[配置镜像权限](https://support.huaweicloud.com/usermanual-swr/swr_01_0074.html) | 仅支持IAM权限管理，详细内容请参见[通过IAM授予使用SWR的权限](https://support.huaweicloud.com/usermanual-swr/swr_01_0073.html)。 增强型登录指令对iam条件键支持做了增强，请参见[下表]。 |
| 是否对接审计日志 | 是                                                                                                                                                                                                                                        | 是                                                                                                                                                                                                  |
| 支持的条件键   | 见[下表]                                                                                                                                                                                                  | 见[下表]                                                                                                                                                            |
   
 表2通用型登录指令与增强型登录指令对推送和拉取的IAM的条件键的支持不同 
| 条件键名称  | 通用型登录指令是否支持      || 增强型临时登录指令是否支持  |
| 条件键名称  | 临时登录指令 | 长期有效登录指令 | 增强型临时登录指令是否支持  |
|:---|:---|:---|:---|
| g:CalledVia                                | 否      | 否        | 否                                                  |
| g:CalledViaFirst                           | 否      | 否        | 否                                                  |
| g:CalledViaLast                            | 否      | 否        | 否                                                  |
| g:PrincipalTag/tag-key                     | 否      | 否        | 是                                                  |
| g:MFAAge                                   | 否      | 否        | 是                                                  |
| g:MFAPresent                               | 否      | 否        | 是                                                  |
| g:SourceIdentity                           | 否      | 否        | 是                                                  |
| g:TokenIssueTime                           | 否      | 否        | 是                                                  |
| g:ViaService                               | 否      | 否        | 是                                                  |
| g:DomainId                                 | 是      | 否        | 是                                                  |
| g:DomainName                               | 是      | 否        | 是                                                  |
| g:PrincipalAccount                         | 是      | 是        | 是                                                  |
| g:PrincipalUrn                             | 是      | 是        | 是                                                  |
| g:PrincipalIsService                       | 是      | 是        | 是                                                  |
| g:PrincipalIsRootUser                      | 是      | 是        | 是                                                  |
| g:PrincipalServiceName                     | 是      | 否        | 是                                                  |
| g:PrincipalType                            | 是      | 是        | 是                                                  |
| g:PrincipalId                              | 是      | 是        | 是                                                  |
| g:UserName                                 | 是      | 是        | 是                                                  |
| g:UserId                                   | 是      | 是        | 是                                                  |
| g:PrincipalOrgPath                         | 是      | 是        | 是                                                  |
| g:PrincipalOrgId                           | 是      | 是        | 是                                                  |
| g:PrincipalOrgManagementAccountId          | 是      | 是        | 是                                                  |
| g:ResourceOrgId                            | 是      | 是        | 是                                                  |
| g:ResourceOrgPath                          | 是      | 是        | 是                                                  |
| g:Referer                                  | 是      | 是        | 是                                                  |
| g:SecureTransport                          | 是      | 是        | 是                                                  |
| g:SourceIp                                 | 是      | 是        | 是                                                  |
| g:SourceVpc                                | 是      | 是        | 是                                                  |
| g:SourceVpce                               | 是      | 是        | 是                                                  |
| g:UserAgent                                | 是      | 是        | 是                                                  |
| g:RequestedRegion                          | 是      | 是        | 是                                                  |
| g:RequestTag/tag-key                       | 否      | 否        | 否                                                  |
| g:ResourceAccount                          | 是      | 是        | 是                                                  |
| g:ResourceTag/tag-key                      | 否      | 否        | 否                                                  |
| g:TagKeys                                  | 否      | 否        | 否                                                  |
| g:EnterpriseProjectId                      | 否      | 否        | 否                                                  |
| g:SourceAccount                            | 否      | 否        | 否                                                  |
| g:SourceUrn                                | 否      | 否        | 否                                                  |
| g:CurrentTime                              | 是      | 是        | 是                                                  |
   
#### 前提条件
- 已安装Docker或Containerd容器引擎客户端。
  
- 若使用增强型方式需确认已启用IAM新平面。
 
#### 获取通用型登录指令方式
下面来介绍如何获取docker容器引擎长期有效登录指令和获取Containerd容器引擎长期有效的拉取、推送镜像指令的详细操作。
- [获取docker容器引擎通用型登录指令之长期有效登录指令]
  
  1. 获取编程访问权限。(如果当前用户已有编程访问权限，请忽略此步骤） 
     1. 以管理员身份，登录[统一身份认证服务控制台](https://console.huaweicloud.com/iam/#/iam/users)。
     
     2. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002125770752.png)，选择区域和项目。
     
     3. 在"用户"页搜索框输入并搜索要授予编程访问权限的用户名称。
     
     4. 单击用户名称，进入用户详情页。单击"访问方式"后面的![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002125612592.png)按钮。勾选"编程访问"选项（可单独勾选编程访问，也可以2种访问方式同时勾选。）
        图1修改访问方式   
        ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002161090705.png "点击放大") 
     
     
     
     
  
  2. 获取AK/SK访问密钥。(如果当前用户已获取AK/SK访问密钥，请忽略此步骤）
     
     ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
     用户登录IAM控制台前，请确保已具有IAM服务访问权限，授权方式请参考[创建用户组并授权](https://support.huaweicloud.com/usermanual-iam/iam_03_0001.html)。
     1. 登录[统一身份认证服务控制台](https://console.huaweicloud.com/iam/#/iam/users)，将鼠标移到用户名处，单击"我的凭证"。
     
     2. 在左侧导航栏中选择"访问密钥"，单击"新增访问密钥"。
     
     3. 输入描述信息，单击"确定"。
     
     4. 在弹出的提示页面单击"立即下载"。
     
     5. 下载成功后，在"credentials.csv"文件中即可获取AK和SK信息。
        表3*credentials.csv文件示例* 
        | *User Name*   | *Access Key Id*      | *Secret Access Key*    |
        |:---|:---|:---|
        | *a\*\*\*\*\** | *RVHVMX\*\*\*\*\*\** | *H3nPwzgZ\*\*\*\*\*\** |
           
        ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
        每个访问密钥文件仅能下载一次，请妥善保管。
        
     
     
     
     
  
  3. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
  
  4. 依次单击页面的"登录指令-\>通用型登录指令-\>长期有效登录指令-\>导入访问密钥"，选择访问密钥文件credentials.csv或者手动输入*[步骤2]* 中获取的 credentials.csv文件中的*Access Key Id* 和*Secret Access Key，* 单击"生成指令"后会自动生成长期有效的登录指令。到此获取完成，后面的步骤您无需执行。如果您的控制台的页面暂无长期有效登录指令页签，请跳过本步骤参考后面的步骤完成手动拼接长期有效登录指令。
     
     ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002477698426.png "点击放大")
     
     
     
     
  
  5. 获取区域项目名称、镜像仓库地址。
     
     1. 登录[统一身份认证服务控制台](https://console.huaweicloud.com/iam/#/iam/users)。
     
     2. 将鼠标移至页面右上角用户名称上。
        图2IAM首页   
        ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002201616238.png "点击放大") 
     
     3. 在下拉菜单中，单击"我的凭证"。
     
     4. 在项目列表中找到您的虚拟机的所属区域及项目：
        图3区域与项目   
        ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002201456410.png "点击放大") 
     
     5. 您可以按照获取到的项目信息拼接镜像仓库地址，拼接方式为 : swr.区域项目名称.myhuaweicloud.com *如用户a\*\*\*\*\*虚拟机所在区域为华北-北京四，那么对应的镜像仓库地址为：swr.cn-north-4.myhuaweicloud.com。*
        
     
     
     
     
  
  6. 登录一台Linux系统的计算机，执行如下命令获取登录密钥。
     
     ```
     printf "$AK" | openssl dgst -binary -sha256 -hmac "$SK" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
     ```
     请将AK替换为[2]*credentials文件* 的*Access Key Id* ，SK替换为[2]*credentials文件* 的*Secret Access Key* ***。***
     *示例：*
     ```
     printf "RVHVMX******" | openssl dgst -binary -sha256 -hmac "H3nPwzgZ******" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
     ```
     执行上面的命令后，我们得到的登录密钥如下：
     ```
     cab4ceab4a1545***************
     ```
     ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
     以上密钥仅为示例，请以实际获得的密钥为准。
     
     
  
  7. 使用如下的格式拼接登录指令。 
     ```
     docker login -u [区域项目名称]@[AK] -p [登录密钥] [镜像仓库地址]
     ```
     其中，区域项目名称和镜像仓库地址在[5]中获取，AK在[2]中获取，登录密钥为[6]的执行结果。
     *示例：*
     ```
     docker login -u cn-north-4@RVHVMX****** -p cab4ceab4a1545*************** swr.cn-north-4.myhuaweicloud.com
     ```
     当显示"Login Succeeded"，即为登录成功。
     ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
     - 登录密钥字符串是经过加密的，无法逆向解密，从-p无法获取到SK。
     
     - 获取的登录指令可在其他机器上使用并登录。
      
     
     
  
  8. （可选）当您退出仓库时，请使用以下命令删除您的认证信息。 
     ```
     cd /root/.docker/
     rm -f config.json
     ```
     
     
  
  9. （可选）使用history -c命令清理相关使用痕迹，避免隐私信息泄露。
   
- [获取Containerd容器引擎通用型登录指令之长期有效的拉取、推送镜像指令]
  
  1. 已拥有编程访问权限。获取编程访问权限方式如下： 
     1. 以管理员身份，登录[统一身份认证服务控制台](https://console.huaweicloud.com/iam/#/iam/users)。
     
     2. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002160976913.png)，选择区域和项目。
     
     3. 在"用户"页搜索框输入并搜索要授予编程访问权限的用户名称。
     
     4. 单击用户名称，进入用户详情页。单击"访问方式"后面的![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002161095369.png)按钮。勾选"编程访问"选项（可单独勾选编程访问，也可以2种访问方式同时勾选。）
        图4修改访问方式   
        ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002125775386.png "点击放大") 
     
     
     
     
  
  2. 已获取AK/SK访问密钥，获取方式如下：
     
     ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
     用户登录IAM控制台前，请确保已具有IAM服务访问权限，授权方式请参考[创建用户组并授权](https://support.huaweicloud.com/usermanual-iam/iam_03_0001.html)。
     1. 登录[统一身份认证服务控制台](https://console.huaweicloud.com/iam/#/iam/users)，将鼠标移到用户名处，单击"我的凭证"。
     
     2. 在左侧导航栏中选择"访问密钥"，单击"新增访问密钥"。
     
     3. 输入描述信息，单击"确定"。
     
     4. 在弹出的提示页面单击"立即下载"。
     
     5. 下载成功后，在"credentials.csv"文件中即可获取AK和SK信息。
        表4*credentials.csv文件示例* 
        | *User Name*   | *Access Key Id*      | *Secret Access Key*    |
        |:---|:---|:---|
        | *a\*\*\*\*\** | *RVHVMX\*\*\*\*\*\** | *H3nPwzgZ\*\*\*\*\*\** |
           
        ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
        每个访问密钥文件仅能下载一次，请妥善保管。
        
     
     
     
     
  
  3. 获取区域项目名称、镜像仓库地址。
     
     1. 登录[统一身份认证服务控制台](https://console.huaweicloud.com/iam/#/iam/users)。
     
     2. 将鼠标移至页面右上角用户名称上。
        图5IAM首页   
        ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002140224149.png "点击放大") 
     
     3. 在下拉菜单中，单击"我的凭证"。
     
     4. 在项目列表中找到您的虚拟机的所属区域及项目。
        图6区域与项目   
        ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002104465456.png "点击放大") 
     
     5. 您可以按照获取到的项目信息拼接镜像仓库地址，拼接方式为 : swr.区域项目名称.myhuaweicloud.com。 *如用户a\*\*\*\*\*虚拟机所在区域为华北-北京四，那么对应的镜像仓库地址为：swr.cn-north-4.myhuaweicloud.com。*
        
     
     
     
     
  
  4. 登录一台Linux系统的计算机，执行如下命令获取登录密钥。
     
     ```
     printf "$AK" | openssl dgst -binary -sha256 -hmac "$SK" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
     ```
     请将**AK** 替换为*[步骤2]credentials.csv文件* 的*Access Key Id* ，**SK** 替换为*[步骤2]credentials.csv文件* 的*Secret Access Key* ***。***
     *示例：*
     ```
     printf "RVHVMX******" | openssl dgst -binary -sha256 -hmac "H3nPwzgZ******" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
     ```
     执行上面的命令后，我们得到的登录密钥如下：
     ```
     cab4ceab4a1545***************
     ```
     ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
     以上密钥仅为示例，请以实际获得的密钥为准。
     
     
  
  5. 使用如下的格式拼接长期拉取和推送镜像的指令。 
     1. 镜像拉取指令拼接
     **ctr image pull --user** \[项目名\]**@** \[*AK* \]:\[*登录密钥* \] \[*镜像仓库地址*\]/{组织名称}/{镜像名称}:{版本名称}
     其中，项目名和镜像仓库地址在[步骤3]中获取，AK*[步骤2]中获取的credentials.csv文件中* 的*Access Key Id* 字段，登录密钥为[步骤4]的执行结果。
     2. 镜像推送指令拼接
     **ctr image push --user** \[项目名\]**@** \[*AK* \]:\[*登录密钥* \] \[*镜像仓库地址*\]/{组织名称}/{镜像名称}:{版本名称}
     其中，项目名和镜像仓库地址在[步骤3]中获取，AK*[步骤2]中获取的credentials.csv文件中* 的*Access Key Id* 字段，登录密钥为[步骤4]的执行结果。
     ![](https://support.huaweicloud.com/usermanual-swr/public_sys-resources/note_3.0-zh-cn.png)
     - 登录密钥字符串是经过加密的，无法将登录密钥字符串逆向解密成SK。
     
     - 获取的指令可在其他机器上使用并进行镜像上传下载。
      
     
     
   
#### 获取增强型登录指令方式
下面来介绍如何获取docker容器引擎增强型登录指令和获取Containerd容器引擎增强型推送和拉取指令的详细操作。
- [获取docker容器引擎增强型登录指令]
  1. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
  
  2. 依次单击页面的"登录指令-\>增强型登录指令"，单击命令末尾的复制按钮完成登录指令复制即可。 
     
     ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002477700334.png "点击放大")
     
     
  
  
  
- [获取Containerd容器引擎增强型推送和拉取指令]
  1. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
  
  2. 在左侧导航栏选择"我的镜像"，单击镜像名称。
  
  3. 在镜像详情页面切换到"Pull/Push指南"页签，单击"生成下载指令"或""生成推送指令"。进入"增强型拉取指令"或"增强型推送指令"，单击命令末尾的复制按钮完成登录指令复制即可。 
     ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002509580957.png "点击放大")
     
     ![](https://support.huaweicloud.com/usermanual-swr/zh-cn_image_0000002583239940.png "点击放大")
     
     
     
   
#### 相关文档
[长期有效的登录指令与临时登录指令的区别是什么？](https://support.huaweicloud.com/swr_faq/swr_faq_0015.html#section1)
[为什么登录指令执行失败？](https://support.huaweicloud.com/swr_faq/swr_faq_0016.html)
[如何获取访问密钥AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)
[拉取镜像](https://support.huaweicloud.com/usermanual-swr/swr_01_0017.html)
[推送镜像](https://support.huaweicloud.com/usermanual-swr/swr_01_0011.html)
