SSH 和 SFTP
DVC 将作为 SSH/SFTP 客户端,这意味着远程存储应位于一个 SSH 服务器中。dvc remote add
可用于定义远程存储,需指定名称和有效的 SSH URL(可包含用户名或端口等认证信息):
$ dvc remote add -d myremote ssh://user@example.com:2222/path
DVC 需要同时具备 SSH 和 SFTP 访问权限才能使用 SSH 远程存储。请检查是否可以使用 ssh
和 sftp
等工具(GNU/Linux 系统)正常连接。
请注意,服务器的 SFTP 根目录可能与其物理根目录(/
)不同。
默认情况下,URL 中未包含的身份验证凭据(如用户名、密码或私钥等)将从 SSH 配置中加载。你也可以直接通过 DVC 设置这些凭据。
自定义身份验证
SSH URL 中通常包含的两个参数是用户名和端口。这些参数可通过以下方式设置(或覆盖):
$ dvc remote modify myremote user myuser
$ dvc remote modify myremote port 2222
当多个位置定义了这些值时,DVC 选择它们的优先顺序如下:
- 在这些
user
/port
参数中设置的值(DVC 特定配置) - 嵌入在
url
中的用户/端口(如果有,例如ssh://user@example.com:2222
) - 在 SSH 配置中为该主机定义的
User
/Port
- 默认值:当前系统用户;标准 SSH 端口 22
使用 dvc remote modify --local
标志可将敏感用户信息写入 Git 忽略的配置文件(.dvc/config.local
),以避免通过 Git 泄露任何机密信息。参见 配置。
使用私钥通常是推荐的 SSH 身份验证方式,且应将其保存在密钥文件中。你可以按如下方式设置其路径。通常这些密钥还需要一个密码短语:你可以配置 DVC 每次使用时提示输入,或直接设置密码。
$ dvc remote modify --local myremote keyfile /path/to/keyfile
# and (if needed)
$ dvc remote modify myremote ask_passphrase true
# or
$ dvc remote modify --local myremote passphrase mypassphrase
另一种常见的 SSH 身份验证方式是使用简单密码。你可以直接设置密码,或配置 DVC 在需要时提示输入:
$ dvc remote modify --local myremote password mypassword
# or
$ dvc remote modify myremote ask_password true
更多配置参数
-
url
- 修改远程位置(详见上方说明) -
allow_agent
- 是否使用 SSH 代理(默认为true
)。将其设置为false
在ssh-agent
导致问题时很有用,例如出现“无现有会话”错误。 -
gss_auth
- 如果主机支持,则使用通用安全服务认证(例如 Kerberos)。默认为false
使用 GSS 需要安装
paramiko[gssapi]
,目前仅 DVC 的 pip 包支持(通过pip install 'dvc[ssh_gssapi]'
安装)。 -
max_sessions
- 更改连接 SSH 服务器时使用的最大 SSH 和 SFTP 会话数。最小值为3
,默认为10
。不应超过服务器端允许的最大会话数。DVC 将尝试从 SSH 服务器使用尽可能多的 SFTP 会话(最多至
max_sessions
)以并行执行远程传输操作。广泛使用的 OpenSSH 服务器(sshd)默认将 MaxSessions 的值设为10
。这意味着默认情况下,DVC 将尝试使用服务器上所有可用的会话。在某些情况下,可能需要指定一个较低的max_sessions
值,以确保为其他(非 DVC)的 SSH 或 SFTP 连接保留一定数量的可用会话。当遇到“无法创建任何 SFTP 连接”错误时,表示 DVC 无法从 SSH 服务器打开任何会话。在这种情况下,我们建议将
max_sessions
设置为小于服务器端最大会话数的某个值。