web-dev-qa-db-ja.com

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.

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

160
アレックス

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

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シエラ

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

Host *
  UseKeychain yes

OSXキーチェーン

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

Mac OS X Leopard以降、キーチェーンがSSHキーの保存をサポートしてきたことを理解しています。誰かがこの機能がどのように機能することになっているのか説明してもらえますか?.

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

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

その後、キーはブート間で維持されます。

Macを再起動すると、キーチェーン内のすべてのSSHキーが自動的に読み込まれます。キーチェーンアクセスアプリで、およびコマンドラインから次のようにしてキーを表示できるはずです。

  ssh-add -l

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

183
slm

_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クライアントのそれぞれのオプションを使用できます。

22
Pavel Šimerda

シエラ

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

または

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

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

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

9
David Winiecki

Macの再起動後にssh IDを有効にするためにこれらを行います。

OSバージョン:MacOS catalinaバージョン10.15.2

  1. Ssh-keyはキーチェーンに必要であるため、作成するときにパスフレーズが必要です。持っていない場合でも、no-passphrase-privatekeyを変更して、次のコマンドを実行することで作成できます:ssh-keygen -p -f ~/.ssh/<.your-privatekey-filename.>

  2. 次のコマンドを実行して、ssh秘密鍵をキーチェーンに追加します:ssh-add -K ~/.ssh/<.your-privatekey-filename.>

  3. 次のコマンドを実行して、キーチェーン内のすべてのssh-privatekeyをssh-agentに追加します:ssh-add -A

  4. ssh-add -lで確認してください。すべてが正常に機能していれば、いくつかの結果が表示されます。

コンピュータを再起動すると、ssh IDが失われます(ssh-add-l結果IDが見つかりません...)。次の2つの方法で修正できます。

  1. ssh-add -Aを端末プロファイルに追加します。たとえば、zsh add ssh-add -A to ~/.zshrcまたは任意のプロファイル構成ファイルを使用する場合。
  2. 〜/ library/launchagents/com。<。yourusename。>。<。name of command。>。plistにファイルを作成して、macos起動スクリプトを追加できます。例:c om.myusername.ssh.plist、スクリプトの詳細:

    ラベルcom.user.loginscript ProgramArguments ssh-add -A RunAtLoad

  3. 再起動するたびにこのスクリプトをロードするようにlaunchdに指示します:launchctl load ~/Library/LaunchAgents/com.myusername.ssh.plist.

  4. とにかくあなたがあなたのユーザー名が何であるかわからない場合。コマンドidを実行するだけで、現在のユーザー名を確認できます。
1
Toni Firnandes