SSH 无法创建目录 /home/USERNAME/.ssh

SSH 无法创建目录 /home/USERNAME/.ssh

我的脚本正在执行以下命令:

command = os.system('rdiff-backup --exclude "**.dropbox**" --exclude "**.ini**" --remote-schema "ssh -o UserKnownHostsFile=/cygdrive/c/Users/Adam/.ssh/known_hosts -i /cygdrive/c/Users/Adam/.ssh/id_rsa %s -p1019 rdiff-backup --server" C:/Users/Adam/Dropbox [email protected]::/mnt/disk1/Adam/Dropbox')

如您所见,我已经告诉它在哪里查找 known_hosts 文件夹,并告诉它密钥在哪里 - 如果没有这两个问题,每次执行时我都会被不断询问是否将我的服务器添加到 known_hosts 并被要求输入密码。遗憾的是 SSH 无法独立找到这些,我的假设是它总是从同一个目录工作,C:\Users\Adam\.ssh

无论如何,我现在收到的唯一错误消息是Could not create directory '/home/Adam/.ssh'- 我已确保当前用户的 HOME 变量正确无误,但似乎仍然找不到 .ssh 文件夹。脚本执行没有问题,只是这个令人讨厌的错误消息。我正在使用 Cygwin 的 SSH 包,我不确定这有多重要?此外,我.ssh使用 Rsync 的 ssh.exe 文件而不是 Cygwin 的生成目录。这重要吗?

答案1

我找到了解决方案的答案这篇博文

passwd“首先,在您的目录中找到名为的文件,然后使用写字板打开它。其次,用最后C:\path\to\cygwin\etc替换文本,保存文件。”/home/YOUR_NAME/cygdrive/c/Documents and Settings/YOUR_NAME


更新

有些人报告说,将 %USERPROFILE% 作为值添加到名为“HOME”的系统变量中是可行的。

答案2

对于那些 2019 年的风滚草,如果你已经尝试了这里的所有方法,但没有任何效果,如果你的nssswitch.conf文件包含:

db_home: windows

在以管理员模式运行的 Cygwin 终端中尝试:

export CYGWIN=winsymlinks:native
mkdir -p /home/$USER
ln -s $HOME/.ssh /home/$USER

额外细节

2015 年,Cygwin/etc/passwd默认停止创建文件:

Cygwin 现在可以直接从 Windows 用户数据库(本地 SAM 或 Active Directory)生成密码/组条目,从而无需创建 /etc/passwd 和 /etc/group 文件即可运行 Cygwin。引入 /etc/nsswitch.conf 文件来配置密码/组处理。

对于需要使用 /etc/passwd 和 /etc/group 文件的边界情况,更改 mkpasswd/mkgroup 以生成与从 SAM/AD 读取的条目兼容的 passwd/group 条目。

https://github.com/Alexpux/Cygwin/blob/master/winsup/cygwin/release/1.7.34#L4-L11

如上所述,mkpasswd命令和etc/passwd文件是与 Windows Active Directory 连接的一种方式。

如果您使用的是使用 Active Directory 的公司计算机,有时 Active Directory 和/或 Cygwin 会在某些地方无法通信,最终导致您丢失控制目录HOME设置位置的条目。要测试此操作,请运行mkpasswd并检查您的用户名是否显示在列表中。

运行后mkpasswd,如果您没有看到您的用户名,默认情况下,Cygwin将在 中ssh搜索文件夹。如果您使用 来设置 Cygwin,则该目录将不存在,并将目录指向。因此,上述命令通过以下方式修复此问题:.ssh/home/$USER/.sshdb_home: windowsHOMEC:\Users\$USER

# Use windows native symlinks (only works in while running as admin)
export CYGWIN=winsymlinks:native

# Create missing directory structure (C:\[Cygwin install directory]\home\$USER)
mkdir -p /home/$USER

# Link C:\User\$USER\.ssh -> C:\[Cygwin install directory]\home\$USER\.ssh
ln -s $HOME/.ssh /home/$USER

这些命令是黑客行为,真正的解决方案是找出mkpasswd无法为用户创建条目的原因。但是,这可能需要深入研究 Active Directory 和 Cygwin :(。

答案3

我遇到了同样的问题,并且已经将 $HOME 设置为 %USERPROFILE%。以下方法对我有用:

将文件中的行更改 /etc/nsswitch.conf为:

db_home: windows cygwin desc

(来自这个答案)

答案4

根据@MidhunVP 的建议,在我删除了 HOME 环境变量后不久,就触发了这个错误。

Control Panel > Edit Environment Variables > New...

Variable Name:  HOME
Variable Value: C:\Users\YOUR_NAME

相关内容