ssh-addはリブート間で持続しません


150

エージェントにsshキーを追加しました:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

再起動後、エージェントにはこのキーが追加されなくなります。

$ ssh-add -l
The agent has no identities.

なぜこれが起こったのですか?


今すぐ完全に答える時間はありませんが、sshモードのgpg-agentはあなたが望むことをします。従来のssh-agentの代わりにそれを試してください。これが助けになれば、後で時間ができたらこれを試して拡張することができます。
バリティ14

@Vality:gpg-agentが再起動後も持続することを疑います。
パベルシメルダ14

@PavelŠimerda秘密鍵をユーザーのパスワードで暗号化$HOME/.gnupg/private-keys-v1.dし、ssh-addで追加するとすぐにそれらを配置します。それは本当に永続的です。不揮発性のホームディレクトリがあると仮定します。
バリティ14

@Vality:それはセキュリティの問題と考えるべきではありませんか?パスフレーズなしでキーを使用するだけで、エージェントを必要とせずにキーを使用できませんでしたか?
パベルシメルダ14

1
@PavelŠimerdaキーはユーザーパスワードで暗号化されて保存されるため、実際にはセキュリティ上の問題ではありませんが、ユーザーが復号化するためにログインするたびに入力するパスワードが必要です。キーを暗号化せずに保存するということは、root(またはハードディスクを盗んだ泥棒)のユーザーがホームディレクトリから盗むことができることを意味します。
バリティ14

回答:


174

エージェントへのキーの追加は一時的です。それらは、エージェントが実行されている間のみ持続します。強制終了するか、コンピューターを再起動すると、再度追加するまで失われます。ssh-agentmanページから:

ssh-agentは、公開鍵認証(RSA、DSA、ECDSA)に使用される秘密鍵を保持するプログラムです。アイデアは、ssh-agentはXセッションまたはログインセッションの開始時に開始され、他のすべてのウィンドウまたはプログラムはssh-agentプログラムへのクライアントとして開始されるということです。環境変数を使用すると、ssh(1)を使用して他のマシンにログインするときに、エージェントを見つけて認証に自動的に使用できます。

エージェントには最初、秘密鍵はありません。キーはssh-add(1)を使用して追加されます。引数なしで実行する場合は、ssh-addは(1)ファイルを追加し~/.ssh/id_rsa~/.ssh/id_dsa~/.ssh/id_ecdsa~/.ssh/identity。IDにパスフレーズが含まれている場合、ssh-add(1)は端末にパスフレーズがあるかどうか、またはX11で実行している場合は小さなX11プログラムからパスフレーズを要求します。これらのどちらでもない場合、認証は失敗します。次に、IDをエージェントに送信します。複数のIDをエージェントに保存できます。エージェントはこれらのIDのいずれかを自動的に使用できます。 ssh-add -l現在エージェントが保持しているIDを表示します。

macOS Sierra

macOS Sierra 10.12.2以降、AppleはSSH構成用のUseKeychain構成オプションを追加しました。に追加UseKeychain yesすると、この機能を有効にできます~/.ssh/config

Host *
  UseKeychain yes

OSXキーチェーン

私はOSXを使用していませんが、スーパーユーザーに関する次のQ&Aを見つけました:SSHキーでMac OS Xキーチェーンを使用する方法は?

Mac OS X Leopard以降、キーチェーンはSSHキーの保存をサポートしていることを理解しています。誰かがこの機能がどのように機能するかを説明してください。

そのため、次のコマンドを使用して、SSHキーをキーチェーンにインポートできます。

$ ssh-add -K [path/to/private SSH key]

その後、キーは起動から起動まで持続します。

Macを再起動すると、キーチェーン内のすべてのSSHキーが自動的にロードされます。キーチェーンアクセスアプリでキーを表示できるだけでなく、次のコマンドラインからも表示できるはずです。

  ssh-add -l

出典:スーパーユーザー-Mac OS XキーチェーンをSSHキーで使用する方法


本当に?Linuxでは、この問題はありません。コンピューターを再起動するたびに「ssh-add my_key」を実行する必要がありますか?
アレックス

2
@Alex答えが説明するように、エージェントはを自動的に追加します~/.ssh/id_rsa。これがLinux上のキーファイルの場所だと思います。また、標準のsshキーエージェントを使用していない可能性もあります。gnome-keyring-daemonなど、動作が異なる他のものがあります。
パトリック14

しかし、Macでは「id_rsa_mac」という名前です。エージェントに自動的に追加させるにはどうすればよいですか?
アレックス

@Patrick:クラシックssh-agentがキーを自動的に追加するかどうかはわかりません。私の意見でssh-addは、標準の場所、またはsshエージェントを使用していない場合はクライアントを読み取ります。
パベルシメルダ14

5
小さな補足、ssh-addコマンドが-Kフラグを認識しない場合、ssh-addのmacportsバージョンを使用している可能性があります... ssh-addのOSXバージョンへのフルパスを指定してmacportsバージョンをバイパスできますこのように:/usr/bin/ssh-add -K /path/to/private/key
ChrisR

20

ssh-agent、一時的に鍵を格納セッションサービス利用者のために。

SSHエージェントの主な目的は、パスフレーズを使用して保護されたキーのクリアテキストバージョンを記憶することです。言い換えると、キーはパスフレーズを使用して暗号化されたディスクに保存され、キーの所有者はssh-addパスフレーズを提供し、セッションが終了するかユーザーが明示的に削除を要求するまでそれを記憶するようエージェントに指示するGUIツールを使用します。

パスフレーズを使用しておらず、エージェント転送を使用していない場合(とにかくほとんどの目的で安全ではありません)、エージェントはまったく必要ありません。SSHクライアントは、標準の場所または明示的に指定された場所のいずれかから、ディスクからキーを読み取れる必要があります。

標準の場所は、マニュアルページにリストされていますssh(1)

デフォルトは、プロトコルバージョン1では〜/ .ssh / identity、プロトコルバージョン2では〜/ .ssh / id_dsa、〜/ .ssh / id_ecdsa、〜/ .ssh / id_ed25519および〜/ .ssh / id_rsaです。

非標準の場所を使用する場合、同じマニュアルページ-issh記載されているスイッチを使用するか、使用しているSSHクライアントの各オプションを使用できます。


4
不使用を提唱ための1ssh-agent
dg99

7

ではシエラ

UseKeychainを使用します。(私はこれを試していませんが、最も正しい解決策のように聞こえます。)

または

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

または、に追加する代わりにplistファイルを作成し~/.bash_profileます。

免責事項:他の人が指摘したように、キーチェーンにsshパスフレーズを保存することがどれほど安全かはわかりません。


上記のすべての方法を試しましたが、これだけが機能します。ありがとうございました!
Duannx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.