通过 azure cli 将文件从 Windows 10 传输到 Linux?

Kan*_*nuc 1 linux ssh windows file-transfer

我有一个 Windows 10 虚拟机,我想将文件传输到 Azure 上的 Linux 计算机。

我通过 Azure 门户在 Linux 计算机上安装了AADSSHLogin扩展。通过Windows 10上安装的Azure CLI,我通过这种方式连接到linux机器来检查ssh连接:

az login
az ssh vm --ip 10.11.11.11
Run Code Online (Sandbox Code Playgroud)

成功了,我尝试在Windows 10上通过powershell在Linux上传输文件:

scp file.sh myuser@10.11.11.11:/opt/Linux/
Run Code Online (Sandbox Code Playgroud)

它要求我输入密码,但不起作用。我的印象是,我必须使用 azure cli 命令来传输文件,因为我已使用az login连接,我已经搜索过并有azcopy但它似乎不是正确的。

我注意到如果我在 powershell 上这样做:

ssh myuser@dominio.org@10.11.11.11
Run Code Online (Sandbox Code Playgroud)

它告诉我:权限被拒绝(公钥)

但如果我这样做:

az ssh vm --ip 10.11.11.11
Run Code Online (Sandbox Code Playgroud)

我可以进去!

我应该怎么办?我缺少什么?

小智 5

Azure CLI 不直接支持文件传输;没有az scpaz ssh scp命令。但它确实间接支持基于 OpenSSH 的应用程序。

首先,运行此命令:

az ssh config --ip * --file ./azure-sshconfig --keys-destination-folder ./azure-keys
Run Code Online (Sandbox Code Playgroud)

az ssh config命令将创建一个本地azure-sshconfig文件以及一个azure-keys包含 OpenSSH 样式配置和能够访问 Azure VM 的密钥的文件夹。请注意,密钥的使用寿命有限;截至撰写本文时,它们将在一小时后过期,并且这似乎不可配置。

获得配置和密钥后,您可以使用其他 OpenSSH 实用程序,例如scpsftp,它们都带有一个-F ./azure-sshconfig参数来指示它们使用您的临时密钥:

scp -F ./azure-sshconfig <local file> <vm name>:~/temp
Run Code Online (Sandbox Code Playgroud)

也可以rsync通过传递来获得(例如,在 WSL 中)工作--rsh 'ssh -F ./azure-sshconfig'- 在这种情况下,rsync不直接接受参数,但您可以完全-F sshconfig覆盖它。ssh我还没有尝试过这个,但它应该有效。

  • 很棒的信息!我必须执行引用资源组 (-g) + VM 名称 (-n) 组合的“az ssh”步骤。在这种情况下,请将此处的 &lt;vm name&gt; 替换为 &lt;resource group-vm name&gt;。例如,“az ssh -g MyResourceGroup -n MyVirtualMachine”意味着我使用“scp -F ./azure-sshconfig &lt;本地文件&gt; MyResourceGroup-MyVirtualMachine:~/temp” (2认同)