gcloud compute copy-files成功但没有文件出现

时间:2016-07-31 22:25:53

标签: google-compute-engine gcloud

我正在将数据从本地计算机复制到计算引擎实例:

gcloud compute copy-files /Users/me/project/data.csv instance-name:~/project

该命令运行并完成:

data.csv 100%   74KB  73.9KB/s   00:00

但是,我在计算引擎实例的任何地方都找不到它。它在~/project文件夹中不可见。是静默失败还是我在错误的地方寻找?

1 个答案:

答案 0 :(得分:2)

简短回答

最有可能的是,您正在查找错误的$HOME。确保你正在寻找 在您要复制的同一用户的主目录中(它将是 如果以前不存在,则在远程主机上创建。

不那么简短的回答

如果您在调用copy-files时未指定任何远程用户,则gcloud 将尝试确定要登录的用户。如果,你可以看到这个 你看一下gcloud源代码:

# $CLOUD_SDK_ROOT/lib/surface/compute/copy_files.py

# [...]

user_host, file_path = arg.split(':', 1)
user_host_parts = user_host.split('@', 1)
if len(user_host_parts) == 1:
    user = ssh_utils.GetDefaultSshUsername(warn_on_account_user=True)
    instance = user_host_parts[0]
else:
    user, instance = user_host_parts

# [...]

在您的情况下,由于您没有指定任何用户,GetDefaultSshUsername() 将被调用,其任务是找到一个有效的SSH用户名 使用。为此,它将选择符合以下条件的第一个选项 顺序:

  1. 使用当前$USER,如果它在GCE特定的约束下有效,即, ASCII字符不包含空格。
  2. 否则,从当前记录的gcloud帐户中提取用户名 in(您可以通过运行gcloud auth list
  3. 来检查它是哪一个

    源代码再次告诉我们最终的事实:

    # $CLOUD_SDK_ROOT/lib/googlecloudsdk/api_lib/compute/ssh_utils.py
    
    def GetDefaultSshUsername(warn_on_account_user=False):
        # [...]
        user = getpass.getuser()
        if not _IsValidSshUsername(user):
            full_account = properties.VALUES.core.account.Get(required=True)
            account_user = gaia_utils.MapGaiaEmailToDefaultAccountName(full_account)
            if warn_on_account_user:
                log.warn('Invalid characters in local username [{0}]. '
                         'Using username corresponding to active account: [{1}]'.format(user, account_user))
            user = account_user
        return user
    

    所以,现在我们知道如何大致选择远程用户名的过程 我的有根据的猜测是,您使用了一个复制了data.csv文件 与稍后检查远程实例的用户不同的用户 如果文件在那里,因为默认情况下他们会降落在他们的文件上 各自和不同的$HOME目录。