我一直在尝试解决Could not create directory
通过 cygwin 安装 openSSH 的问题,并尝试了所有解决方案我可以在互联网上找到,但它们都不起作用......
我已经安装了 cygwin,它似乎可以工作。我安装了 openSSH,它似乎也可以工作(我可以通过 ssh 连接到其他机器)。
我已将 cygwin bin 文件夹放入path
,因此我可以ssh
从命令行运行,而且这样也可以。但每次运行它时都会出现错误:
Could not create directory '/home/will/.ssh'
The authenticity of host 'blah (111.222.333.444)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)?
它为什么要尝试使用该目录?我已将环境变量设置HOME
为%USERPROFILE%
,当我回显它时它会打印正确的位置,并且我还创建了目录.ssh
并ssh-keygen
在那里完成了该操作。
我在某处看到需要替换home/will
,cygwin/etc/passwd
但我没有那个文件。如果我用它mkpasswd -l
来生成它,它不包括我作为用户,所以我什么都不能替换。我真的很困惑。
我需要做什么/设置什么才能使其工作?
答案1
如果您查看“/usr/bin/ssh-user-config”,您会注意到以下建议:
csih_error_multi \
"There is no home directory set for you in the account database." \
'Setting $HOME is not sufficient!'
无需接触 Windows 用户数据库,定义不同主目录的最快方法是:
mkpasswd -d -u "Your_Windows_User_Name" > /etc/passwd
or
mkpasswd -l -u "Your_Windows_User_Name" > /etc/passwd
很可能“会”。因为您的用户是本地用户或域用户。
并使用您想要的值修改倒数第二个字段“/home/will”。
对于 Windows 和 Cygwin 用户来说,附加阅读材料:
https://cygwin.com/cygwin-ug-net/ntsec.html
https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch
答案2
您可以编辑 /etc/ssh/ssh_config 并添加以下属性:
IdentityFile /C/Users/username/.ssh/id_rsa
UserKnownHostsFile /C/Users/username/.ssh/known_hosts
这仍然会打印错误Could not create directory '/home/username/.ssh'.
但除此之外一切都正常。顺便说一下,我使用的是 msys2,但理论上这也应该对你有用。
答案3
感谢 matzeri 提示我查看 /usr/bin/ssh-user-conifg。查看后,我意识到该脚本正在通过调用 获取主目录getent passwd
。当我在系统上运行该脚本时,我看到它要查找的主目录位于 /home(在 Windows 文件系统中,该目录转换为 C:\Cygwin64\home\myusername)
我的实际 Windows 主目录 (%USERDIR%) 是 C:\Users\myusername,Cygwin 将其视为 /cygdrive/c/Users/myusername。
我发现,作为创建 /etc/passwd 文件的替代方法,我可以将 Windows 主目录符号链接到 Cygwin 想要的位置:
cd /home
rm -rf myusername
ln -s /cygdrive/c/Users/myusername .
完成此操作后,SSH 就可以毫无问题地读取我的 Windows 主目录中的 .ssh 目录。