远程连接:ProxyClient方式

如果您希望通过本地工具(例如VSCodeTerminal)远程连接DSW实例进行机器学习开发,可以使用DSW提供的ProxyClient客户端代理工具。该工具允许您通过SSH远程连接DSW实例,且无需配置专有网络VPCNAT网关。

实施步骤

步骤一:下载和安装DSW ProxyClient

  1. 下载DSW ProxyClient客户端工具,并保存到当前用户主目录下。

    不同的操作系统,需要保存的目录如下:

    • Windows操作系统:保存在用户个人文件夹目录,例如C:\Users\<username>目录或C:\用户\<username>目录。

    • Linux操作系统:root用户保存在/root目录;普通用户保存在 /home/<username>目录。

    • Mac操作系统:保存在/Users/<username>目录。

    其中,<username>需要替换为实际的目录。

    各版本的客户端下载地址如下:

  2. 在命令行中,将下载的客户端文件修改为可执行文件。如果您下载的是Windows X86 64版本,则可以跳过该步骤。

    chmod 755 <proxyclient>

    其中<proxyclient>表示下载的客户端文件名,需要根据实际情况修改。

  3. 生成配置文件。

    1. 输入配置命令。

      # Mac,Linux。
      ./proxyclient config
      # Windows。
       proxyclient.exe config
      重要

      Mac首次运行./proxyclient命令时,可能会提示:无法打开”proxyclient“,因为无法验证开发者。请打开Mac OS系统偏好设置 > 安全性与隐私,设置允许proxyclient运行。

    2. 根据提示设置配置文件路径。

      请输入配置文件名,文件名可以带路径。

      说明
      • 建议直接按回车键(Enter)使用默认路径和配置文件名称。默认为:~/.proxyclientconfig

      • 您也可以指定其他路径和配置文件名称。以Windows X86 64版本为例:C:/Users/<username>/xxx/.proxyclientconfig

      • 如果设置为其他路径,请在后续步骤四中执行./proxyclient add命令时,指定-c--config-file为该路径。

    3. 根据提示分别设置RegionId、AccessKey ID、AccessKey SecretSTSToken参数。

      参数说明如下。

      参数

      说明

      RegionId

      地域ID,例如:华东2(上海)为cn-shanghai。更多其他地域ID,详情请参见地域和可用区列表

      重要

      此处配置的地域ID,需要与DSW实例所在地域一致。

      AccessKey ID

      填写账号的AccessKey,关于如何获取阿里云账户的AccessKey IDAccessKey Secret,详情请参见创建AccessKey

      AccessKey Secret

      STSToken

      • 当您使用阿里云账号(主账号)或RAM用户(子账号)登录时,不需要配置该参数,置空即可。

      • 当您使用RAM角色登录时,需要使用临时身份凭证,需要配置该参数。关于STSToken的生成方式,请参见获取STS临时Token

      重要

      请确保STS Token在有效期内。

步骤二:配置SSH认证方式

您可以选择使用SSH密钥对或账号密码的认证方式连接DSW实例。

重要

对于专有资源组的DSW实例,认证方式配置完成后,单击DSW实例操作列下的保存镜像,添加的公钥或密码会持久化到实例镜像中,实例重新启动后仍有效。

方式一:配置实例免密登录(推荐)

  1. 生成密钥对。

    1. 在本地命令行中,运行以下命令,生成免密登录所需的公钥和私钥文件,默认创建的密钥类型为RSA。

      ssh-keygen
    2. 配置密钥对保存的文件。

      • (推荐)不指定文件名,直接按回车键(Enter)。默认生成的密钥对文件为~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥)。

      • (可选)指定自定义密钥对的文件名,例如:example_id_rsa。

        说明

        如果指定了自定义密钥对的文件名,您需要在步骤三:添加DSW实例代理生成的~/.ssh/config中,通过指定IdentityFile的方式来声明私钥文件路径。

    3. 根据提示信息设置passphrase,并将其保存到本地。后续会使用该密码来远程连接DSW实例。

  2. 进入要连接的DSW实例,打开Terminal,执行如下命令,setup_ssh.sh工具会自动帮您下载安装SSH Server。

    wget https://dsw-resource.oss-cn-beijing.aliyuncs.com/tools/setup_ssh.sh
    bash setup_ssh.sh
  3. 根据提示配置SSH公钥,启动SSH Server。

方式二:配置账号密码登录

  1. 进入要连接的DSW实例,打开Terminal。

  2. 执行如下命令设置root用户密码。

    passwd root
  3. 更改ssh配置文件,启用root用户以密钥或公钥认证方式登录。

    1. 打开SSH配置文件。

      vi /etc/ssh/sshd_config
    2. 将配置#PermitRootLogin prohibit-password修改为PermitRootLogin yes,并保存配置文件。

      image

  4. 重启SSH Server服务,使设置生效。

    service ssh stop
    service ssh start

步骤三:添加DSW实例代理

  1. 在实例列表页面,按照下图操作指引,查看并复制要连接的DSW实例ID。

    e08dad9ce3e2dc97cbebdea95b9cea14

  2. 在本地命令行中,运行以下命令,添加一个DSW实例作为SSH Target Host。

    其中<实例ID>需要替换为步骤2中查询的实例ID。

    # Mac,Linux:
    ./proxyclient add -i=<实例ID>
    # Windows:
    proxyclient.exe add -i=<实例ID>
  3. 查看.ssh/config文件内容,确认代理设置已生效。

    # Mac、Linux。
    cat .ssh/config
    
    # Windows。在本地命令行中,进入用户主目录,使用以下命令查看config文件内容。您也可以直接双击打开config文件。
    explorer .ssh\config

  4. 可选:如果您在生成密钥时,使用自定义的密钥文件名,例如:example_id_rsa。请参考以下示例修改~/.ssh/config文件,使用IdentityFile指定连接Host时使用的密钥文件路径。

    Host dsw-b7a2765b267e****
        HostName dsw-b7a2765b267e****
        User root
        ProxyCommand ~/proxyclient connect --region-id=cn-hangzhou --instance-id=dsw-b7a2765b267e**** --config-file=***
        ServerAliveInterval 30
        IdentityFile ~/.ssh/example_id_rsa

步骤四:远程连接DSW实例

使用终端远程连接实例

打开终端工具(例如本地命令行),执行以下命令,即可登录远程实例。

其中<实例ID>需要替换为DSW实例的ID。

ssh <实例ID>

您也可以通过scp命令,在本地主机和远程实例之间复制文件或目录。

# 本地文件复制到远程实例。
scp local_file_path root@<DSW实例ID>:<remote_file_path>
# 本地目录复制到远程实例。
scp -r local_dir root@<DSW实例ID>:<remote_dir>
# 从远程实例复制文件到本地。
scp root@<DSW实例ID>:<remote_file_path> <local_file_path>
# 从远程实例复制文件目录到本地。
scp -r root@<DSW实例ID>:<remote_dir> <local_dir>

使用VSCode远程连接实例

不同的VSCode版本可能在操作步骤上有差异,请按照实际情况进行操作,详情请参见Visual Studio Code

  1. 在本地打开VSCode,并参照下图来安装远程连接插件。

    SSH

  2. VSCode左侧导航栏中,单击Remote explorer

    SSH Targets

  3. 新增远程连接实例。

    1. 单击远程连接后的新增新增远程连接实例。在弹出的文本框中输入DSW实例ID,并按回车键(Enter)。

      Remote

    2. 单击并选择需要更新的config文件。

      配置文件

    3. VSCode右下角弹出的Host added对话框中,单击Connect

      Connect

    4. 单击Linux,选择DSW实例的操作平台。

      操作平台

    5. 在文本框中输入上述步骤三中保存到本地的passphrase,并按回车键(Enter)。

      passphrase

      VSCode打开欢迎页面时,表示连接成功。后续您可以在VSCode页面打开远程文件夹进行本地开发。VS Code

  4. 后续远程连接该DSW实例时,您可以右键单击目标实例,并选择连接方式,根据提示信息进行配置。

    连接方式

常见问题

Q:远程连接SSH直连和ProxyClient代理两种方案区别?

方案A:SSH 直连(推荐)

方案B:ProxyClient 代理

特点

需要配置VPC、NAT网关等网络组件。连接更快、更稳定。

无需其他网络组件。但连接速度和稳定性可能较差。

支持实例

  • 使用公共资源组创建的后付费DSW实例。资源规格不能以 ecs.ebm 开头。

  • 使用灵骏智算资源创建的DSW实例。

所有类型实例。

鉴权方式

使用SSH的公钥或私钥进行鉴权。

  1. 先通过ProxyClient填写阿里云AccessKey等信息进行鉴权。

  2. 再通过SSH的公钥或私钥进行鉴权。

访问途径

  • 通过公网进行访问(需要配置NAT网关和EIP)。

  • 在用户VPC内通过内网进行访问。

通过公网进行访问。

配置方法

远程连接:SSH直连方式

远程连接:ProxyClient方式

工作原理

PAI 会自动在NAT 网关上创建 DNAT 规则,将公网的 SSH 请求转发到您的 DSW 实例。

所有流量通过 PAI 的代理服务器进行中转。

计费提醒

需要公网访问时,NAT 网关和 EIP 会持续计费,即使DSW已停止。如果不再需要,请及时删除。

此配置不产生额外费用。

Q:RAM用户(子账号)为什么连接失败?

如果您使用RAM用户的AccessKey通过ProxyClient连接,必须确保主账号已为该RAM用户授予paidsw:GetToken的操作权限,否则会导致认证失败。添加该权限步骤:

授权操作步骤

  1. 使用主账号进入RAM控制台

  2. 创建如下权限策略:

    {
       "Version": "1",
       "Statement": [
         {
           "Effect": "Allow",
           "Action": "paidsw:GetToken",
           "Resource": "*"
         }
       ]
    }
  3. 进入RAM授权页将步骤2中的策略授权给对应的RAM账号。

Q:为什么连接超时或无法访问?

检查proxyclient.exe生成的配置文件中,RegionId是否与您的DSW实例所在地域完全一致。

Q:DSW实例是否支持创建多个用户并分别通过SSH登录?

DSW实例默认仅提供root用户用于SSH登录 。目前,DSW原生不支持创建多个独立用户并为他们分别配置SSH隔离登录的功能。您可以尝试在实例内部手动创建新用户,但这并非官方支持的标准用法。

Q:在本地IDE(如VSCode、PyCharm)中连接DSW时,看不到工作目录文件怎么办?

SSH登录后默认的目录可能是root用户的主目录(/root)。您的工作文件通常位于挂载的数据盘路径下,例如 /mnt/workspace。在VSCode中,您可以通过侧边栏的“文件” > “打开文件夹”功能,手动选择并打开服务器上的正确工作目录,即可在文件浏览器中看到您的项目文件。

相关文档

  • 使用ProxyClient客户端代理工具可能会影响使用体验,例如频繁需要重连、速度低等。因此,建议您使用远程连接:SSH直连方式