我正在尝试创建一个 Azure 管道。该过程的一部分涉及创建服务连接,以便我可以安全地将文件复制到远程服务器。
我有两个问题:
- 我应该在
Service connection name
字段中输入什么? 一个带有简短说明的示例就足够了。 - 如果我启用了 MFA,如何创建此 SSH 服务连接?UI 上没有与此相关的选项。
我向 ChatGPT 询问了这个问题,但我不知道它是否正确。
如果您在远程计算机上启用了 MFA(多重身份验证),则需要使用不同于传统密码或私钥的身份验证方法。一种选择是使用安全令牌,它是一种基于时间的代码,由身份验证器应用(例如 Microsoft Authenticator)生成,并与您的密码一起使用以进行身份验证。
要在 Azure Pipeline SSH 任务中使用安全令牌,您需要向任务配置添加一个附加参数。以下是如何使用安全令牌配置 SSH 任务的示例
- task: SSH@0
inputs:
sshEndpoint: '<your SSH service connection name>'
runOptions: 'ssh -o StrictHostKeyChecking=no'
command: 'ls -l'
arguments: '-la /home'
sshPublicKey: '<your public key>'
sshPassphrase: '<your passphrase>'
sshExtraOptions: '-o IdentitiesOnly=yes'
useAgentAuth: false
sshPassword: '<your password>'
sshSecurityToken: '<your security token>'
在此示例中,该
sshSecurityToken
参数用于指定用于身份验证的安全令牌。您还需要在配置中包含公钥、密码(如果适用)和密码(如果适用)。
这是正确的吗?如果正确,我该如何实际实现涉及安全令牌的身份验证这一部分?任何帮助都将不胜感激。
答案1
服务 connection name
依据手册是:
必需。用于在任务属性中引用服务连接的名称。它不是您的 Azure 帐户或订阅的名称。如果您使用 YAML,请在脚本中使用该名称作为 azureSubscription 或等效订阅名称值。
换句话说:将使用一个强制标签名称/标签来标识此连接。几乎任何对您有意义的东西都应该有效。示例使用MyArmSubsciption
,但 ssh2hostname
或ServiceConnection-2-Hostname-via-ssh
或任何对您有用的内容。
笔记:有可能关于允许使用哪些字符的限制(例如,没有空格、没有通配符、没有表情符号和/或只有A-Z,a-z,0-9,-_.
等等),但我找不到这些限制是否记录在案。
可选描述应该允许比连接名称更长的描述和更少的输入限制。
SSH 多因素身份验证 - 我希望它简单一点不支持。
从哲学和设计上来说,MFA 旨在阻止自动登录,而且我没有看到任何人在管道中提供手动输入一次性身份验证码的断点。
一种典型的解决方法是设置一个单独的服务帐户/技术帐户,该帐户不需要 MFA,并且仅使用 ssh 公钥身份验证就足够了。
为了解决这种安全问题:使用 openssh 相对未得到充分利用的功能和~/.ssh/authorized_keys
文件格式 - 即:配置使用特定密钥对登录时设置的选项/限制的能力。