ssh-add は再起動後も持続しません。

ssh-add は再起動後も持続しません。

次のようにエージェントに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.

なぜこれが起こるのですか?

答え1

エージェントにキーを追加するのは一時的です。エージェントの実行中にのみ持続します。シャットダウンまたはコンピュータを再起動すると、再追加す​​るまでそのエントリが失われます。ssh-agentマニュアルページから:

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

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

macOS シエラレオン

macOS Sierra 10.12.2から起動、AppleはSSH設定用のUseKeychain設定オプションを追加しました。UseKeychain yesに加えてこれを行うことができます~/.ssh/config

Host *
  UseKeychain yes

OSXキーチェーン

私はOSXを使用していませんが、SuperUserで次のタイトルのQ&Aを見つけました。SSHキーでMac OS Xキーチェーンを使用するには?

私が知る限り、KeychainはMac OS X LeopardからSSHキーの保存をサポートしています。誰かがこの機能がどのように機能するかを説明できますか?

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

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

その後、起動するたびにキーを保持する必要があります。

Macを再起動するたびに、キーチェーン内のすべてのSSHキーが自動的にロードされます。 Keychain Accessアプリケーションと次のコマンドラインでキーを表示できます。

  ssh-add -l

源泉:スーパーユーザー - SSHキーでMac OS Xキーチェーンを使用する方法は?

セラの上?

以降のバージョンのMacOSでは、-Kまたはスイッチを使用しようとする-Aとこのメッセージが表示されることがあります。たとえば、

 $ ssh-add -K
WARNING: The -K and -A flags are deprecated and have been replaced
         by the --apple-use-keychain and --apple-load-keychain
         flags, respectively.  To suppress this warning, set the
         environment variable APPLE_SSH_ADD_BEHAVIOR as described in
         the ssh-add(1) manual page.

したがって、警告メッセージで提供されている指示を代わりに使用してください。

$ ssh-add --apple-load-keychain --apple-load-keychain
Identity added: /Users/slm/.ssh/somekey1_id_rsa (/Users/slm/.ssh/somekey1_id_rsa)
Identity added: /Users/slm/.ssh/somekey2_id_rsa (/Users/slm/.ssh/somekey2_id_rsa)

また、この環境変数とそのAPPLE_SSH_ADD_BEHAVIOR値を使用して警告を表示しないこともありますmacosssh-addマニュアルページから:

$ man ssh-add
...
APPLE_SSH_ADD_BEHAVIOR
        Enables or disables the older processing of the -A and -K 
        options used in earlier macOS releases.  These options have 
        been renamed --apple-load-keychain and --apple-use-keychain
        respectively. However, -A and -K still behave as in earlier 
        releases except in the following circumstances.  If a 
        security provider was specified with -S or SSH_SK_PROVIDER, 
        or if APPLE_SSH_ADD_BEHAVIOR is set to the value “openssh”, 
        then ssh-add uses standard OpenSSH behavior: the -A flag is 
        not recognized and the -K flag behaves as documented in the 
        DESCRIPTION section above.

        Otherwise, ssh-add -A and -K will behave as in earlier macOS 
        releases. A warning will be output to standard error unless
        APPLE_SSH_ADD_BEHAVIOR is set to the value “macos”.  Note: 
        Future releases of macOS will not support neither -A nor -K
        without setting this environment variable.

答え2

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.

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

答え3

存在するセラ:

使用キーチェーンの使用。 (やったことはありませんが、最も正確な解決策のようです。)

または

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

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

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

答え4

上記の回答のうち、この問題を解決する回答はほとんどありません。以下にリストされているLinuxおよびMacOsソリューションがあります。

Linuxでも同じ問題が発生します。他の人が言ったように、これssh-addは一時的なものです。解決策は、ssh-addコマンドを追加する.bashrcか、単に使用しないことです。

解決策は以下に記載されていますこの回答到着gitにどの秘密鍵を使用するかを教える方法は?

オプション4:~/.ssh/config

他の回答で提案されたファイルを使用して秘密鍵~/.ssh/configの場所を指定してください。

Host github.com
  User git
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa

Macでは、設定に次の行を追加することは~/.ssh/config私にとって効果的でした。

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/github

私はテストしていませんこの回答到着macOS Sierraは再起動の間にSSHキーを覚えていないようです。しかし、私の考えでは、それがあなたが探していると思います。

関連情報