私のアカウントとサーバーにログインするためのSSHキーセットがあります。しかし、基本的な職場プロファイルをUSBドライブに移動した後(同期化や使いやすさなどの理由で)まっすぐ認証には構成ファイルのSSHキーを使用しますが、ローカルコピーを作成する必要があります。
一般的なSSHワークフローは通常進行します。
ssh-add $HOME/.ssh/id_server_key
ssh username@domain
問題なく動作します。しかし、すべてのコンピュータに私のキーのコピーがあるのを防ぐために、そのキーをvfat
。しなければならない次のようになります。
ssh-add /run/media/myself/USB/.ssh/id_server_key
ssh username@domain
...これはうまくいきません。 SSHは私を守るためにいくつかのことをすることについて文句を言います。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @警告:保護されていない秘密鍵ファイルです! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @ 「id_server_key」の権限 0644 がオープンしすぎます。 あなたの秘密鍵ファイルは他の人がアクセスできないはずです。 秘密鍵は無視されます。 無効な権限:キーを無視する:id_server_key 権限が拒否されました(公開鍵)。
わかりますが、実はそうではありません。本物この状況で私を守ってください。
USBドライブはfmaskを使用してディストリビューションに自動的にマウントされます022
。 fmaskを使用してUSBドライブをアンマウントして再マウントする077
ことはできますが、(1)毎回スーパーユーザー権限が必要です。(2)SSHキーだけでなく、デバイス上のすべてのファイルにも影響します。
umask
いくつかのヒントやコツで見たように、以前に使用されたことがあっても、キーへのシンボリックリンクを作成してみました。
cd .ssh
umask 077
ln -s /run/media/myself/USB/.ssh/id_server_key
ただし、この方法ではシンボリックリンクに権限を使用できないため、何も取得できません。
だから何オプション私の目標ならいいえマシンにキーの物理コピーがありますか?マシンの1つは、複数の場所に移動する家庭用ラップトップであるため、いくつかのキーが見つからないようにすることに興味があります。
これまで、私は次のことを考えました。
ssh-add
たとえば、SSHが外部デバイスのキーを(ほとんど)受け入れるように強制するオプションはありますか? (私は持っているべきだと思います。ほとんどのプログラムは「私がやっていることを知っています」という記号に従いますが、これまではマンページにはありません。bindfs
がディレクトリに設定されていますが、.ssh/
問題はディレクトリが空ではないことです(known_hosts
他のデータが含まれているため)。fuse-zip
- 鍵をひっくり返すことも/dev/shm
可能な経路のようです。
編集する:@Gillesのコメントによると、はい、bindfs
問題は解決しました。マンページを確認した後、次の呼び出しを使用して初期テストに成功しました。
bindfs -n -r -p 0700 -o nonempty /run/media/myself/USB/.ssh/ ~/.ssh
これは他のユーザーにアクセス権をバインドせず(明らかにroot
!)、読み取り専用であり、反射0700
権を持ちます。この反映は、私が初めてbinfsを使い始めたときに落ちたことです。これはnonempty
、既存のファイルが原因でknown_hosts
元のワークフローを完全に保存します(たとえば、情報を追加できないという追加の警告メッセージを除外するknown_hosts
(結局は気にしないかもしれません)。
もちろん、もともと提案されているように、作業を少し簡単にするために、ファイルシステムを別のディレクトリ(/dev/shm)にバインドしました。
私はencfs
まだUSBドライブにあまり興味がないので、プライバシーの面ではこれほど十分です。
答え1
次のように外部キーをロードできます。名前付きパイプ、例えば
$ mkfifo -m=600 fifo
$ cat /external/media/.ssh/id_server_key >fifo | ssh-add fifo
プロセス置換を使用することも可能です(bash / zshに似た構文を使用)。
$ ssh-add <(cat /external/media/.ssh/id_server_key)
上記のコマンドは次のとおりですcat /external/media/.ssh/id_server_key | ssh-add -
。
あなたの家匿名パイプには正しい権限があります。(検査通過:)stat <(:)
。
または標準入力からロードしてみてください。
$ cat /external/media/.ssh/id_server_key | ssh-add -
答え2
ssh-add
重要な権限の確認をバイパスするオプションはありません。プログラムを再コンパイルしてこのチェックを無効にできます。
Bindfsが機能するはずです。インストールする必要はありません~/.ssh
。特別な目的の場所にインストールしてこれを行うスクリプトを作成してくださいssh-add ~/.ssh-private-keys-bindfs
。
設定は非常に安全ではないので、sshは正しいです。あなたが唯一のユーザーではないコンピュータにドライブを接続しないでください。
答え3
これは、次の行に示すように権限の問題です。
「id_server_key」の権限 0644 がオープンしすぎます。
これは、秘密鍵に対する権限があまりにも公開されているため、SSHが鍵の信頼性を保証できず、使用を躊躇しているために発生します。
したがって、権限の変更をサポートしていないサムドライブのVFATnessを考慮して、/etc/fstab
ファイルに次の行を追加するなどの操作を実行できます。
LABEL=USB none msdos -u=USERID,-m=PERMS
ここで、USERID は数値のユーザー ID、PERMS は 700 です。この操作を済ませると、自動セットアッププログラムは、常にグループやその他の権限なしでUSBドライブをそのユーザーとしてマウントするように指示する必要があります。
ファイルシステムが権限をサポートしている場合は、次の手順を実行して問題を解決する方が簡単です。
chmod 700 /run/media/myself/USB/.ssh
chmod 400 /run/media/myself/USB/.ssh/id_server_key
答え4
Ubuntu 20.04では、以下が正常に動作します。
cat ~/.ssh/my-key.pem | ssh-add -
Identity added: (stdin) ((stdin))