
# SSH远程开发
本节操作介绍在Windows环境中使用[方式一：使用CMD工具连接云上训练作业实例]和[方式二： 使用MobaXterm工具连接云上训练作业实例]两种方式远程登录云上实例的操作步骤。
#### 约束限制
使用SSH连接训练作业实例的约束限制如下：
- 本地用户密钥和权限必须匹配。
- 本地用户密钥需要存放在指定目录下。
  - Windows：C:\\Users\\{{user}}
  
  - macOS/Linux：\~
    ![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/note_3.0-zh-cn.png)
    在macOS和Linux系统中，\~ 表示当前用户的主目录。
    
   
- 远端镜像中的ma-user不能被锁定。
- 远端的/home/ma-user/.ssh或/root/.ssh目录权限建议设置为750或755。
- 本地或远端的OpenSSH版本不能低于8.0。
- 建议同时建立的连接数不超过10个。
如果遇到SSH连接问题，请参考[本地通过SSH连接的故障排查](https://support.huaweicloud.com/trouble-modelarts/modelarts_05_4195.html)进行解决。
 #### 前提条件
- 已创建一个训练作业实例，并开启远程SSH开发。该实例状态必须处于"运行中"。
  - 关于如何新建训练作业实例，请参见[创建自定义训练作业](https://support.huaweicloud.com/usermanual-standard-modelarts/develop-modelarts-0006.html)。
  
  - 关于如何在已有训练作业实例开启远程SSH开发，请参见[修改SSH远程连接配置](https://support.huaweicloud.com/devtool-modelarts/modelarts_30_0051.html#section2)。
   
- 在训练作业实例详情页面查找**SSH远程开发** 访问配置项获取开发环境访问地址（例如：dev-modelarts-cnnorth4.huaweicloud.com）和端口号。
  图1训练作业实例详情页面   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002648166142.png "点击放大") 
- 准备好密钥对文件。 密钥对在用户第一次创建时，自动下载，之后使用相同的密钥时不会再有下载界面（用户一定要保存好），或者每次都使用新的密钥对。
  
 
#### SSH远程开发地址说明
SSH远程开发地址的格式如下：
```
ssh -o StrictHostKeyChecking=no -i {密钥文件名} {启动用户}@{域名} -p {端口}
```
假设SSH远程开发地址如下，密钥文件名为KeyPair-1234-test.pem，ma-user为启动用户，authoring-ssh-modelarts-\*\*\*\*\*.huawei.com为域名，31092为端口。
```
ssh -o StrictHostKeyChecking=no -i KeyPair-1234-test.pem ma-user@authoring-ssh-modelarts-*****.huawei.com -p 31092
```
 #### 方式一：使用CMD工具连接云上训练作业实例
下文以Windows系统为例进行说明。
1. 打开CMD。
   - 方式一：使用开始菜单
     1. 在电脑左下角，单击"开始"，或者按键盘上的Windows键。
     
     2. 在开始菜单中，输入CMD，单击"命令提示符"。
        图2打开CMD   
        ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002664933237.png "点击放大") 
      
   
   - 方式二：使用运行对话框
     1. 在键盘按"Windows+R"键，打开"运行"对话框。
     
     2. 在"运行"对话框中输入CMD，按Enter键或单击"确定"。
      
    
2. 在CMD中，进入密钥所在目录并执行以下命令，连接训练实例。
   ```
   ssh -o StrictHostKeyChecking=no -i {密钥文件名} {启动用户}@{域名} -p {端口}
   ```
   命令中的{密钥文件名}、{启动用户}、{域名}、{端口}请替换为您实际的信息，从[前提条件]获取。
   例如，密钥文件名为KeyPair-1234-test.pem，SSH远程开发的访问地址为ssh://ma-user@authoring-ssh-modelarts-\*\*\*\*\*.huawei.com:31092，其中ma-user为启动用户，authoring-ssh-modelarts-\*\*\*\*\*.huawei.com为域名，31092为端口。命令示例如下：
   ```
   ssh -o StrictHostKeyChecking=no -i KeyPair-1234-test.pem ma-user@authoring-ssh-modelarts-*****.huawei.com -p 31092
   ```
   如下图所示，出现交互界面，表示连接成功。
   图3使用CMD连接训练实例   
   ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002664773289.png "点击放大") 
 
 #### 方式二： 使用MobaXterm工具连接云上训练作业实例
1. 下载并安装SSH远程连接工具，以MobaXterm为例，下载并安装[MobaXterm](https://mobaxterm.mobatek.net/)。
2. 打开MobaXterm，在左上角单击"Session"，在"Session settings"对话框的SSH页签，配置Remote host、Username、Port和Use private key，单击"OK"。
   图4配置Session   
   ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002716154939.png "点击放大")
   SSH远程开发的访问地址、密钥文件的路径从[前提条件]获取。例如，SSH远程开发的访问地址为ssh://ma-user@authoring-ssh-modelarts-\*\*\*\*\*.huawei.com:31092，配置示例如下。
   表1配置说明 
   | 配置项                                    || 说明                                                                                                   | 示例值                                           |
   |:---|---|:---|:---|
   | Basic SSH settings    | Remote host     | 远程主机的地址，从SSH远程开发的访问地址中获取。                                                                            | authoring-ssh-modelarts-\*\*\*\*\*.huawei.com |
   | Basic SSH settings    | Username        | 用于连接远程主机的用户名，从SSH远程开发的访问地址中获取。                                                                       | ma-user                                       |
   | Basic SSH settings    | Port            | 用于连接远程主机的端口号，从SSH远程开发的访问地址中获取。                                                                       | 31092                                         |
   | Advanced SSH settings | Use private key | 密钥文件的路径。从[前提条件]获取。 | C:\\Users\\\*\*\*\\KeyPair-1234-test.pem      |
      
   如下图所示，出现交互界面，表示连接成功。
   图5使用MobaXterm连接训练实例   
   ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002686475502.png "点击放大") 

3. （可选）分布式作业跳转其他节点容器
在分布式训练作业（Volcano Job）场景下，一个作业通常包含多个Task（如worker-0、worker-1等）。平台已自动为您配置了实例间的SSH免密登录，您可以在已登录的节点中直接跳转到其他节点，方便进行多节点集群调试。
**操作步骤**
1. 获取目标节点主机名在当前已登录的容器终端中，通过平台自动注入的环境变量查看所有节点的主机名：
   ```
   env | grep VC_%s_HOSTS
   ```
   例如：
   ```
   env | grep VC_WORKER_HOSTS
   ```
   说明：Volcano会根据Task名称注入变量，例如：
   ```
   VC_WORKER_HOSTS=ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f-worker-0.ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f,ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f-worker-1.ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f
   ```
   如果节点数超过阈值（默认500节点），只能注入worker-0。如下例：
   ```
   VC_WORKER_HOSTS=ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f-worker-0.ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f
   ```
   
2. 直接执行SSH跳转由于平台已预置免密互信，您无需输入密码，直接通过ssh命令即可跳转到作业内的其他worker节点。 **说明：**worker节点间跳转ssh端口是2222，假如要跳转到worker-1节点，需要在ssh命令增加2222端口。
   # 跳转到worker-1节点
   ```
   ssh ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f-worker-1.ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f -p 2222
   ```
   

3. 验证跳转结果跳转成功后，终端提示符会显示新的主机名。您可以通过执行hostname命令确认：
   ```
   hostname
   ```
   # 输出示例：
   ```
   ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f-worker-1.ma-job-40a6df3b-d136-452e-9b8c-530baf9b777f
   ```
   
**注意事项**
- **用户名一致性**：跳转时默认使用当前登录的ma-user用户。
- **环境变量生效范围**：跳转后的新节点同样拥有平台注入的环境变量（如VC_WORKER_HOSTS），方便您在各节点间自由穿梭。
- **自动互信范围**：免密登录仅限于同一训练作业（Job）内的各节点容器之间。
 
