【问题标题】:Ubuntu on windows 10 wsl2 - chown chmod doesn't work on copied filesWindows 10 wsl2 上的 Ubuntu - chown chmod 不适用于复制的文件
【发布时间】:2020-12-15 10:25:37
【问题描述】:

我刚刚在 windows 商店的 windows 10 (2004) WSL 2 上安装了 ubuntu 20.04.1 LTS。

我想从cygwin切换,所以我将cygwin ssh配置从/mnt/d复制到~

cp -R /mnt/d/dev/cygwin64/root/home/myuser/.ssh/ .

我通常的 ssh 连接不起作用,它似乎来自 ~/.ssh 的文件/文件夹权限

此文件夹上的 ls 不起作用

$ ls -al .ssh/
ls: cannot access '.ssh/id_rsa.pub': Permission denied
ls: cannot access '.ssh/id_rsa': Permission denied
ls: cannot access '.ssh/..': Permission denied
ls: cannot access '.ssh/.': Permission denied
ls: cannot access '.ssh/known_hosts': Permission denied
total 0
d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? id_rsa
-????????? ? ? ? ?            ? id_rsa.pub
-????????? ? ? ? ?            ? known_hosts

我试过了

sudo chown myuser:myuser .ssh
sudo chown myuser:myuser .ssh/*

.ssh 还是和????????一样

这是主文件夹的视图

$ ls -al
total 44
drwxr-xr-x 5 myuser myuser 4096 Aug 25 10:54 .
drwxr-xr-x 3 root  root  4096 Aug 24 21:14 ..
-rw------- 1 myuser myuser  974 Aug 25 11:12 .bash_history
-rw-r--r-- 1 myuser myuser  220 Aug 24 21:14 .bash_logout
-rw-r--r-- 1 myuser myuser 5026 Aug 25 10:53 .bashrc
drwxr-xr-x 2 myuser myuser 4096 Aug 24 21:19 .docker
drwxr-xr-x 2 myuser myuser 4096 Aug 24 21:15 .landscape
-rw-r--r-- 1 myuser myuser    0 Aug 26 17:00 .motd_shown
-rw-r--r-- 1 myuser myuser  807 Aug 24 21:14 .profile
drw-r--r-- 2 myuser myuser 4096 Aug 25 10:54 .ssh
-rw-r--r-- 1 myuser myuser    0 Aug 24 21:16 .sudo_as_admin_successful
-rw------- 1 myuser myuser  792 Aug 25 10:53 .viminfo

我尝试使用自动挂载添加 wsl.conf 文件但没有成功

$ cat /etc/wsl.conf
[automount]
enabled = true
options = "metadata"

【问题讨论】:

    标签: windows-subsystem-for-linux


    【解决方案1】:

    另一个解决方案是使用 Ubuntu 文件系统。

    您可以在 Windows 上通过路径 \\wsl$ 访问它。

    使用 Ubuntu 文件系统可能会产生其他问题。但是文件权限不会是一个,因为您只会使用 Ubuntu 文件系统并将这些文件同步到 Windows(而不是相反)。

    【讨论】:

    • 我知道您打算如何处理此问题,但为了清楚起见,您应该在此处提供更多信息。此解决方案的问题是,如果 9P 服务器出现故障,这在 WSL2 中确实发生(在 WSL1 中并不常见,但仍不时发生。)
    【解决方案2】:

    Ssh 配置是每个用户的,因此您实际上需要将其复制到/home/myuserhttps://devblogs.microsoft.com/commandline/sharing-ssh-keys-between-windows-and-wsl-2/ 提供了极好的操作方法。总结并调整以匹配 Cygwin 路径:

    作为您的 WSL 用户:

    编辑您的 /etc/wsl.conf 以匹配以下内容:

    [automount]
    enabled = true
    options = "metadata,uid=1000,gid=1000,umask=0022,fmask=11,case=off"
    mountFsTab = false
    crossDistro = true
    
    [filesystem]
    umask = 0022
    
    [network]
    generateHosts = true
    generateResolvConf = true
    
    [interop]
    enabled = true
    appendWindowsPath = true
    

    额外的元数据选项以及文件系统选项应该有助于确保正确分配权限。您还需要重置 WSL 发行版会话,以便读取和传播更改。在 CMD 或 Powershell 中,执行 wsl --shutdown。再次输入您的发行版,通常使用wsl.exe

    删除以前的文件和文件夹.ssh(权限错误)

    然后:

    cp -r /mnt/c/dev/cygwin64/root/home/myuser/.ssh/ ~/.ssh
    sudo chown myuser:myuser .ssh 
    sudo chown myuser:myuser .ssh/*
    sudo chmod 600 ~/.ssh/id_rsa
    

    【讨论】:

    • 其实问题不在于ssh配置,而在于.ssh文件夹中的文件权限。 chown 和 chgrp 不起作用。 .ssh 文件夹中的文件仍然具有??????? 权限:(
    • 添加了更多细节。让我知道这是否正常工作。
    • wsl.conf 中的这些新条目没有解决权限问题(即使在 chown+chmod 之后)
    • 无法更新坏文件。我不得不删除并再次复制它们使用这些选项更新wsl.conf 并重新启动计算机
    • 不需要重新启动。但是我确实忘记添加您需要重新启动 WSL 会话才能应用 /etc/wsl.conf 中的更改。我会添加这个。
    【解决方案3】:

    在两个操作系统之间共享您的 SSH 密钥。

    sudo umount /mnt/c
    
    sudo mount -t drvfs C: /mnt/c -o metadata
    

    或者试试

     ln -s /mnt/c/Users/MyUsername/.ssh ~/.ssh
    

    问题是在 Windows 10 中安装 ssh 密钥,以便 wsl 可以读取它。

    【讨论】:

    • 这是一个很好的解决方案(我之前自己也使用过),但是如果互操作中断,那么您将无法访问您的 ssh 密钥。如果发生这种情况是一种痛苦的方式。最好制作一个副本,这样就不需要互操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2020-12-22
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多