为SSH访问启用多重身份验证
为了提高安全性,云基础架构上的Adobe Commerce提供了多重身份验证(MFA)实施,以管理对云环境的SSH访问的身份验证要求。
在项目上启用MFA后,所有具有SSH访问权限的用户帐户都需要双重身份验证(TFA)代码或API令牌和SSH证书才能访问环境。
用于SSH访问的证书
MFA允许用户使用由Adobe云认证器API生成的短期SSH证书交换OAUTH访问令牌。 如果用户具有管理员或参与者角色、有效的SSH密钥和有效的TFA代码或API令牌,则云基础架构上的Adobe Commerce将使用这些凭据生成临时SSH证书。 证书过期时间被设置为一小时,但在当前会话期间会自动刷新。
使用MFA登录项目后,用户必须使用magento-cloud
CLI来生成SSH证书:
magento-cloud ssh-cert:load
ssh-cert:load
命令会生成SSH证书并将其安装到本地用户的SSH代理中。
登录时自动生成证书
您可以配置本地环境,以便在向magento-cloud
CLI进行身份验证时自动生成SSH证书。
要将SSH证书自动生成添加到magento-cloud
CLI配置:
-
在本地工作站上,在主目录的
.magento-cloud
文件夹中创建一个名为config.yaml
的文件(如果该文件不存在)。code language-bash touch ~/.magento-cloud/config.yaml
-
将以下配置添加到
config.yaml
文件。code language-yaml api: auto_load_ssh_cert: true
-
使用
magento-cloud
CLI再次进行身份验证:注销:
code language-bash magento-cloud logout
登录:
code language-bash magento-cloud login
按照响应操作:
code language-none Please open the following URL in a browser and log in: http://127.0.0.1:5000 Help: Leave this command running during login. If you need to quit, use Ctrl+C. To log in using an API token, run: magento-cloud auth:api-token-login Login information received. Verifying... You are logged in. Generating SSH certificate... A new SSH certificate has been generated. It will be automatically refreshed when necessary. The certificate is included in your SSH configuration: /Users/<user-name>/.ssh/config
要使用SSH与TFA用户帐户凭据连接:
-
登录到您的帐户。
-
在本地工作站上,使用
magento-cloud
CLI生成SSH证书。code language-bash magento-cloud ssh-cert:load
示例响应:
code language-none Generating SSH certificate... Expires at: 2020-07-13T15:28:13-04:00 Multi-factor authentication: verified Mode: interactive The certificate will be automatically refreshed when necessary. Checking SSH configuration file: /Users/<user-name>/.ssh/config Do you want to update the file automatically? [Y/n] Y Configuration file updated successfully: /Users/<user-name>/.ssh/config
-
使用SSH连接到远程环境。
code language-bash ssh abcdef7uyxabce-master-7rqtwti--mymagento@ssh.us-5.magento.cloud
code language-none __ __ _ ___ _ _ | \/ |__ _ __ _ ___ _ _| |_ ___ / __| |___ _ _ __| | | |\/| / _` / _` / -_) ' \ _/ _ \ | (__| / _ \ || / _` | |_| |_\__,_\__, \___|_||_\__\___/ \___|_\___/\_,_\__,_| |___/ Welcome to Magento Cloud. This is environment master-7rqtwti of project abcdef7uyxabce. web@mymagento.0:~$
使用带有TFA的SSH管理源代码
在云基础架构项目中管理Adobe Commerce的源代码时,您可以使用SSH对项目的Git存储库进行身份验证。 如果您的项目启用了MFA实施,则必须先生成SSH证书,然后才能使用Git存储库执行命令行操作。
要使用SSH与TFA用户帐户凭据连接:
-
登录到您的帐户并使用TFA进行身份验证。
note note NOTE 如果您的帐户未启用TFA,则必须启用它。 请参阅在云帐户上启用TFA。 -
在本地工作站上,使用
magento-cloud
CLI生成SSH证书。code language-bash magento-cloud ssh-cert:load
示例响应:
code language-none Generating SSH certificate... Expires at: 2020-07-13T15:28:13-04:00 Multi-factor authentication: verified Mode: interactive The certificate will be automatically refreshed when necessary. Checking SSH configuration file: /Users/<user-name>/.ssh/config Do you want to update the file automatically? [Y/n] Y Configuration file updated successfully: /Users/<user-name>/.ssh/config
-
克隆项目环境的Git存储库:
code language-bash git clone --branch integration abcdef7uyxabce@git.us-3.magento.cloud:abcdef7uyxabce.git myproject
示例响应:
code language-none Cloning into 'myproject'... Connection to git.us-3.magento.cloud port 22 [tcp/ssh] succeeded! remote: counting objects: 22, done. Receiving objects: 100% (22/22), 82.42 KiB | 16.48 MiB/s, done.
使用带有API令牌的SSH连接到环境
在项目上启用MFA后,需要对云环境进行SSH访问的自动化流程需要API令牌。 您可以通过具有项目管理员或参与者访问权限的云基础架构帐户上的Adobe Commerce来生成令牌。
使用API令牌进行身份验证仍需要生成SSH证书。 自动化流程还必须自动生成SSH证书。
要使用SSH与API令牌凭据连接:
-
使用API密钥身份验证登录到云项目。
code language-bash magento-cloud auth:api-token
-
在提示符下,输入有效API令牌的值。
code language-none Please enter an API token: > The API token is valid. You are logged in.
示例:自动SSH脚本
存储API令牌有两种选项。
magento-cloud
CLI会自动进行身份验证,而无需执行magento-cloud login
命令。选项1:创建环境变量以存储API令牌
将令牌写入bash_profile
echo "export MAGENTO_CLOUD_CLI_TOKEN=<your api token>" >> ~/.bash_profile
选项2:将令牌添加到config.yaml
文件
-
在本地工作站上,在主目录的
.magento-cloud
文件夹中创建一个名为config.yaml
的文件(如果该文件不存在)。code language-bash touch ~/.magento-cloud/config.yaml
-
将以下配置添加到
config.yaml
文件。code language-yaml api: token: <your api token>
示例bash脚本
#!/bin/bash
magento-cloud ssh-cert:load
ssh abcdef7uyxabce-master-7rqtabc--mymagento@ssh.us-3.magento.cloud "tail -n 10 ~/var/log/cloud.log"
故障排除
使用以下信息解决由于身份验证错误(如access requires MFA
或permission denied
)导致的SSH连接请求失败。
您的请求未提供有效证书
如果您的请求未提供有效的证书,则会显示一条与以下内容类似的消息:
to Hello user-test (UUID: abaacca12-5cd1-4b123-9096-411add578998), you successfully
authenticated, but could not connect to service abcdef7uyxabce-master-7rqtabc--mymagento@ssh.us-3.magento.cloud:>
(reason: access requires MFA)
尝试以下故障排除过程来解决连接问题:
- 验证帐户TFA配置
- 再次进行身份验证,然后重新加载证书
验证TFA配置和身份验证:
验证并重新加载SSH证书:
-
使用
magento-cloud
CLI再次进行身份验证:code language-bash magento-cloud logout
code language-bash magento-cloud login
-
重新加载SSH证书:
code language-bash magento-cloud ssh-cert:load
权限被拒绝
如果SSH密钥缺失或无效,则SSH连接请求返回Permission denied (publickey)
错误。
Hello user-test (UUID: abaacca12-5cd1-4b123-9096-411add578998), you successfully authenticated, but could not connect to service oh2wi6klp5ytk-mc-35985-integration-nnulm4a--mymagento (reason: service doesn't exist or you do not have access to it)
oh2wi6klp5ytk-mc-35985-integration-nnulm4a--mymagento@ssh.eu-3.magento.cloud: Permission denied (publickey).
要解决此问题,请将SSH密钥添加到当前会话,或更新SSH配置文件以自动加载SSH密钥。 请参阅添加公共SSH密钥。
无法在没有MFA的情况下访问项目
如果您对启用了多重身份验证(MFA)的项目进行身份验证,则在连接到其他不需要MFA的项目时,可能会收到以下错误:
ssh abcdef7uyxabce-master-7rqtabc--mymagento@ssh.us-3.magento.cloud
示例响应:
abcdef7uyxabce-master-7rqtabc--mymagento@ssh.us-3.magento.cloud: Permission denied (publickey).
在SSH证书生成过程中,magento-cloud
CLI会向本地环境添加一个额外的SSH密钥。 如果您的本地SSH配置不包括用于项目访问的SSH密钥,则默认使用该密钥。
要将SSH密钥添加到本地配置:
-
创建
config
文件(如果该文件不存在)。code language-bash touch ~/.ssh/config
-
添加
IdentityFile
配置。code language-yaml Host * IdentityFile ~/.ssh/id_rsa
IdentityFile
条目来指定多个SSH密钥。