web-dev-qa-db-ja.com

プライベートSSHキーをWindowsのBashと共有する

Windows 10にGitがインストールされています。このGitは、私のC:/Users/MyName dirをHOMEディレクトリとして使用し、内部の/.ssh/ dirを使用して、秘密のSSHキーを取得します。

"Bash on Ubuntu on Windows"を有効にしてセットアップし(一口に!)、Gitをインストールしました。両方のGitsで同じキーのセットを使用して、このマシンでどの環境で作業しているかに関係なく、コミットは常に自分からのものになるようにしたいと思います。

BashのHOMEディレクトリが異なる(/home/MyName)ため、現在は離れている../../mnt/c/Users/MyName/.sshにあるキーが表示されないという問題。を使用してHOME環境変数を変更することで、勝者になると思いました

export HOME=/c/mnt/Users/MyName

これはHOME dirを正常に変更しましたが、bash gitは./.ssh dirに含まれるキーをまだ認識していません。

これがAかどうかはわかりませんが、bash gitは別のファイル形式のキーを想定しているためですか? (現在のものはid_rsaおよびid_rsa.pubです)B)bash gitは変更されたHOME変数を無視していますか?または多分両方。

C)このようにHOME変数を任意に変更することが一般的に良いアイデアであるかどうかもわかりません(他のプログラムがそれを参照する可能性がありますか?)

18
Toby

Telastynがコメントしたように、WSLにシンボリックリンクを追加しました~/.ssh/を使用して、id_rsaおよびid_rsa.pubに次のように記述します。

> ln -s /mnt/c/Users/MyName/.ssh/id_rsa ~/.ssh/id_rsa
> ln -s /mnt/c/Users/MyName/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub

Tripleeeによって提案されたのと同じ手法を使用して、代わりにシンボリックリンクディレクトリをリンクすると、lnコマンドで使用した末尾のスラッシュが見えるまで問題が発生しました(タブキーを使用してディレクトリに入力し、名前)が問題でした。したがって、上記を実行する代わりに、次のようにすることができます。

> ln -s /mnt/c/Users/Myname/.ssh ~/.ssh

Known_hostsファイルは、Windowsでの私の使用(ssh-agentを使用したpowershellでのgit)とWSLでのSSHの使用とで若干異なります。これにより、Windowsバージョンではホスト名とIPがハッシュされません。 ssh-configのmanページによると、このハッシュを無効にするために使用できるフラグがあります。これは、これまで機能していないハッシュなしでSSHがファイルを理解するという意味です。

この後者の方法は、2つの異なる環境間で使用されるSSHに使用される詳細がまったく同じであることを意味します。

小さくても重要な欠けているキャラクターを指摘してくれたMatějKřížに感謝します!

19
Toby

新しいビルド「Insider Build 17063」に基づいて、ファイルの権限が異なる動作をするようになりました。つまり、次のことを行う必要があります。

Sudo umount /mnt/c
Sudo mount -t drvfs C: /mnt/c -o metadata

これにより、sshフォルダーの権限が必要に応じて機能します。次に、OPが彼の答えで示唆するように処理しました。

関連リンク:

https://github.com/Microsoft/WSL/issues/3181https://blogs.msdn.Microsoft.com/commandline/2018/01/12/chmod-chown- wsl-improvements /

[〜#〜]編集[〜#〜]

これは一時的な解決策であることがわかったので、この質問に戻りました(はい、私は愚かです)。 WSLを再起動(ログアウト)するたびに、このコマンドを再度キャストする必要があります。

だから私のために今うまくいく解決策は設定ファイルを編集(作成)することです/etc/wsl.conf私のwsl ubuntuで、以下の中に入れてから、再起動して再度マウントを行います。

# Enable extra metadata options by default, set uid and gid to 0
[automount]
options = "metadata,uid=,gid="

メタデータを追加する理由:

Linuxパーミッションは、追加のメタデータとしてファイルに追加されます。これは、ファイルにLinuxおよびWindowsの読み取り/書き込み/実行許可ビットを含めることができることを意味します。

Uidとgidを設定する理由:

デフォルトでは、WSLはuidとgidをデフォルトユーザーの値に設定します(Ubuntuディストリビューションでは、デフォルトユーザーはuid = 1000、gid = 1000で作成されます)。ユーザーがこのキーを介してgidまたはuidオプションを明示的に指定すると、関連付けられた値が上書きされます。それ以外の場合は、デフォルト値が常に追加されます。

関連リンク:

https://docs.Microsoft.com/en-us/windows/wsl/wsl-confighttps://blogs.msdn.Microsoft.com/commandline/2018/02/ 07/automatically-configuring-wsl /https://blogs.msdn.Microsoft.com/commandline/2018/01/12/chmod-chown-wsl-improvements/

11
Entity Black