次のようにエージェントに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/identity
ssh-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
値を使用して警告を表示しないこともありますmacos
。ssh-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キーを覚えていないようです。しかし、私の考えでは、それがあなたが探していると思います。