openSSH 忽略了 HOME 环境变量

openSSH 忽略了 HOME 环境变量

我一直在尝试解决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%,当我回显它时它会打印正确的位置,并且我还创建了目录.sshssh-keygen在那里完成了该操作。

我在某处看到需要替换home/willcygwin/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 目录。

相关内容