私はcygwin経由でインストールされたopenSSHのCould not create directory
問題を解決しようとしていて、インターネットで見つけることができるすべてのsolutionを試しましたが、どれも機能していません...
Cygwinをインストールしましたが、動作しているようです。 openSSHをインストールしましたが、これも機能しているようです(他のマシンにSSHで接続できます)。
Cygwinbinフォルダーを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
dirを作成し、そこでssh-keygen
を実行しました。
home/will
のcygwin/etc/passwd
を置き換える必要があることをどこかで読みましたが、そのファイルがありません。また、mkpasswd -l
を使用して生成した場合、ユーザーとしての私は含まれないため、置き換えることはできません。私は本当に困惑しています。
これを機能させるには、何をする/設定する必要がありますか?
「/ 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
おそらく「意志」。ユーザーはローカルまたはドメインです。
そして、最後の1つのフィールド「/ home/will」を必要な値で変更します。
WindowsおよびCygwinユーザーに関する追加資料:
https://cygwin.com/cygwin-ug-net/ntsec.html
https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch
/ 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を使用していますが、理論的にはこれでも機能するはずです。
/ usr/bin/ssh-user-conifgを参照するためのヒントを提供してくれたmatzeriに感謝します。そこを見ると、スクリプトが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ディレクトリを問題なく読み取ることができます。