web-dev-qa-db-ja.com

openSSHはHOME環境変数を無視しています

私は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/willcygwin/etc/passwdを置き換える必要があることをどこかで読みましたが、そのファイルがありません。また、mkpasswd -lを使用して生成した場合、ユーザーとしての私は含まれないため、置き換えることはできません。私は本当に困惑しています。

これを機能させるには、何をする/設定する必要がありますか?

3
will

「/ 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
2
matzeri

/ 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を使用していますが、理論的にはこれでも機能するはずです。

1
Waqas Ilyas

/ 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ディレクトリを問題なく読み取ることができます。

0
David C.