web-dev-qa-db-ja.com

Ubuntuのssh-addで秘密鍵を永久に追加するにはどうすればいいですか?

SSH経由でサーバーにアクセスするためのパスワードで保護された秘密鍵があります。

私は2つのlinux(ubuntu 10.04)マシンを持っています、そしてssh-addコマンドの振る舞いはそれらの両方で異なります。

あるマシンでは、「ssh-add .ssh/identity」を使用してパスワードを入力すると、キーが恒久的に追加されました。つまり、コンピュータをシャットダウンして再度ログインするたびに、キーはすでに追加されます。

もう1つの方法では、ログインするたびにキーを追加する必要があります。

私が覚えている限りでは、私は両方で同じことをしました。唯一の違いは、キーが恒久的に追加されたものの上に作成されたということです。

他のマシンにも恒久的に追加する方法を誰かが知っていますか?

406
duduklein

解決策は、キーファイルを~/.ssh/configファイルに追加することで、キーファイルを永続的に保持することです。

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer

〜/ .sshディレクトリに 'config'ファイルがない場合は、作成する必要があります。 root権限を必要としないので、単純に次のようにします。

nano ~/.ssh/config

...そしてあなたの要求に従って上記の行を入力してください。

これが機能するには、ファイルにchmod 600が必要です。コマンドchmod 600 ~/.ssh/configを使用できます。

あなたがコンピュータ上のすべてのユーザにキーを使わせたい場合は、これらの行を/etc/ssh/ssh_configに入れ、キーをallにアクセス可能なフォルダに入れてください。

さらに、1つのホストに固有のキーを設定したい場合は、〜/ .ssh/configで次のことを実行できます。

Host github
    HostName github.com
    User git
    IdentityFile ~/.ssh/githubKey

@ github.comではなく@githubでクローンを作成する必要がありますが、これにはこのキーのみが試行されるという利点があります。

536
daminetreg

これは私にとってMac OS X Lionの下の同じ問題には答えなかった。追加しました:

ssh-add ~/.ssh/id_rsa &>/dev/null

私の.zshrcに(しかし、.profileも大丈夫だろう)、それはそれを修正したようだ。

(ここで示唆されるように: http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/

105
Aaron

私はMac OSX(10.10)でssh-addに-Kオプションを使うことでこの問題を解決しました。

ssh-add -K ~/.ssh/your_private_key

MacOS 10.12以降では、ここで説明しているようにsshの設定を追加編集する必要があります。 https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain

96
totas

Ubuntuのクイックヒント https://help.ubuntu.com/community/QuickTips で参照されているように、キーチェーンを追加するだけです。

Ssh-agentとssh-addを常時起動する代わりに、keychainを使ってsshキーを管理することが可能です。キーチェーンをインストールするには、ここをクリックするか、Synapticを使用してジョブを実行するか、コマンドラインからapt-getを実行します。

コマンドライン

ファイルをインストールするもう1つの方法は、端末を開き(アプリケーション - >アクセサリ - >端末)、次のように入力することです。

Sudo apt-get install keychain

ファイルを編集

その後、$ {HOME} /。bashrcまたは/etc/bash.bashrcに次の行を追加してください。

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
29
Christian Saiki

@ Aaronの解決策を試してみましたが、端末で新しいタブを開くたびにキーが追加されてしまうため、あまりうまくいきませんでした。それで私はそれを少し修正しました(私のキーのほとんどはパスワードで保護されているので、出力を/ dev/nullに送信することはできません)。

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi

これがすることは、それがssh-add -l(これは追加されたすべてのキーをリストする)の出力を特定のキーについてチェックし、それが見つからなければそれをssh-addで追加することです。

ターミナルを初めて開いたときには、プライベートキーのパスワードを要求され、コンピュータを再起動する(またはログアウトする - チェックしていない)まで、再度要求されることはありません。

私はたくさんのキーを持っているので、パフォーマンスを向上させるためにssh-add -lの出力を変数に格納します(少なくともパフォーマンスを向上させると思います:)

シモンズ:私はLinux上にいて、このコードは私の~/.bashrcファイルに行きました - あなたがMac OS X上にいるならば、私はあなたがそれを.zshrcまたは.profileに追加するべきであると思います

編集:コメントで@Aaronによって指摘されているように、.zshrcファイルはzsh Shellから使用されています。 bashではなく、このコードはあなたの.bashrcファイルに行くべきです。

17

私の場合、解決策は次のとおりです。

設定ファイルのパーミッションは600です。chmod 600 config

上記のコメントでgeneralopinionによって述べられているように

設定ファイルの内容に触れる必要はありません。

11
erezmta

私はUbuntu 16.04で同じ問題を抱えていました:いくつかのキーは恒久的に追加されました、他のために私はすべてのセッションでssh-addを実行しなければなりませんでした。私は、恒久的に追加されたキーはプライベートキーとパブリックキーの両方が~/.sshにあり、すべてのセッションで忘れられていたキーはプライベートキーしか~/.sshディレクトリにないことがわかりました。そのため、解決方法は簡単です。~/.sshを実行する前に、 both プライベートキーと公開キーをssh-addにコピーする必要があります。

4
NShiny

Ubuntu 14.04(おそらく以前、おそらくまだ)ではコンソールさえも必要ありません。

  • seahorseを起動するか、 "key"を検索しているものを起動してください。
  • そこにSSHキーを作成する(またはインポートする)
    • パスフレーズを空のままにする必要はありません
    • 公開鍵をサーバーにプッシュすることも、それ以上にすることもできます。
  • あなたはssh-agentが実行され、このキーがロードされたがロックされてしまうことになります
  • sshを使うことはエージェントを通してアイデンティティ(すなわちキー)を拾います
  • セッション中の最初の使用時に、パスフレーズがチェックされます。
    • そしてあなたは自動的にログイン時にキーのロックを解除するオプションを持っています
    • これは、ログイン認証がキーのパスフレーズをラップするために使用されることを意味します
  • 注:あなたのアイデンティティを転送したい(すなわちエージェント転送)場合は-Aを付けてあなたのsshを起動するかそれをデフォルトにしてください
    • そうでなければ、あなたはそのキーで認証することはできません 後であなたがログインしたマシン上で3番目のマシンへ
3
Robert Siemer

私は2つのid_rsaキーを使ってUbuntuを実行します。 (仕事のための個人的なもの)。 ssh-addは一つの鍵(個人用の鍵)を覚えていて毎回会社のものを忘れてしまうでしょう。

2つの違いを調べてみると、私の個人キーには400の権利があり、会社のキーには600の権利がありました。 (u + wがありました)会社のキーからユーザーの書き込み権限を削除する(u-wまたは400に設定)と、問題が解決しました。 ssh-addは両方のキーを覚えています。

2
Fholst

"〜/ .bashrc"に以下の行を追加することで問題は解決しました。 Ubuntu 14.04デスクトップを使用しています。

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"
2
reynoldpj

これは私のために働きました。

ssh-agent /bin/sh
ssh-add /path/to/your/key
2
Jaseem Abbas

とても簡単^ _ ^ 2つのステップ

1.yumインストールキーチェーン

2.以下のコードを.bash_profileに追加

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
2
LawrenceLi

Fish Shellを使っている人は、以下の関数を使って〜/ .config/fish/config.fishでそれを呼び出すことができます。 id_rsa で始まるすべてのキーがssh-agentにロードされます。

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys

端末を開いたときにssh-agentを自動的に起動させたい場合は、 tuvistavie/fish-ssh-agent を使用してこれを実行できます。

1
frederickjh