Ubuntuでssh-addを使用して秘密キーを永続的に追加するにはどうすればよいですか?[閉まっている]


474

SSH経由でサーバーにアクセスするための秘密鍵をパスワードで保護しています。

私は2台のlinux(ubuntu 10.04)マシンを使用しており、ssh-addコマンドの動作は両方で異なります。

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

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

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

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


1
エージェントは一時的なものでなければなりません。しかし、両方のマシンの1つで〜/ .bashrcなどのどこかにssh-addコマンドがある可能性があります
mirek

回答:


632

解決策は、キーファイルをファイルに追加することで、キーファイルを永続的に保持すること~/.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と、すべてのユーザーがアクセスできるフォルダにキーを入力します。

さらに、1つのホストに固有のキーを設定する場合は、〜/ .ssh / configで次のようにできます。

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

これには、最初に間違ったIDを試したためにサーバーが拒否しないIDが多数ある場合に利点があります。特定のIDのみが試行されます。


82
設定ファイルの権限は600でなければなりませんchmod 600 config
generalopinion

6
これを使用してプッシュ、フェッチ、またはクローンするたびにパスワードを入力する必要があります。これを回避するにはどうすればよいですか?
Asaf 2014

9
代わりssh-add ~/.ssh/gitHubKeyにを使用してください。キーのパスフレーズが記憶されます。私が提案した解決策は、再起動後も永続的に設定することでした。
daminetreg 2014

28
この答えはとても良いので、ssh-addは存在すべきではありません。構成ファイルを永続的に編集するだけで問題を「一時的に」修正し、予期せず中断するコマンドが必要な人。
RussellStewart 2014

2
問題は、この種の構成にあります。特定のホストの.ssh / configでそれを行わないと、毎回すべてのサーバーに対してすべてのキーが試行されます。
daminetreg 2014

118

これは、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/


6
ssh-addは保護された秘密鍵のパスフレーズを記憶できる認証エージェントを使用するため、認証を試みるたびに入力する必要がないため、これは私が提案したソリューションよりも優れていると思います。あなたが提案するソリューションのもう一つの利点は、キーがたくさんある場合、sshクライアントが接続しようとするサーバーに関係のないキーを提案しないことです。実際、このサーバー用のキーのみを提供し、 t ssh / configにリストされているすべてのキーを試行しているときに、MaxAuthTriesに達したためにサーバーが接続を拒否することになります。
daminetreg 2012

1
@daminetregに感謝します。私の特定の問題は、秘密鍵を開発マシンに転送せずに開発マシンのgitosisにアクセスする必要があることでした。このソリューション(およびForwardAgent yesmyへの追加.ssh/config)は、その問題を素晴らしく解決しました。結局のところssh-add &>/dev/null、のデフォルトの動作としてはssh-add.sshフォルダで見つかったキーを追加するように見える可能性があります。
アーロン

1
私の理解では、Mac OSで-Kスイッチがあるということです:stackoverflow.com/questions/1909651/...は
NICU Tofan

3
@TNick -Kは、OS Xのキーチェーンにキーを追加します。これは、OS X GUIが外部サーバーへの認証に使用します。そのQの投稿者はSSHトンネルを介して接続していますが、まだリモートサーバーに接続しています。A- [SSHトンネル]-> B現在のケースは、リモートサーバー上にありますが、ホームシステムの資格情報に対して認証を行う必要がある場合です。A < - [認証] - B - [接続] - > Cだからで-Kはない、実際に助けを行いますが、他のQ.ための優れたソリューションです
アーロン

112

Mac OSX(10.10)では、ssh-addに-Kオプションを使用してその問題を解決しました。

ssh-add -K ~/.ssh/your_private_key

macOS 10.12以降の場合は、https//github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychainの説明に従って、ssh設定をさらに編集する必要があります。


3
恒久的に設定したい人にとっては、これがより良い答えです
punkrockpolly

12
したがって、このビット:「Mac OSX(10.10)の場合」...
Andrew K.

1
これは問題なくMac OSXで動作しますが、Ubuntu(私のテストでは14.04)では動作しません。
haxpor 2016

5
これは私にはうまくいきませんでした(OSX 10.12.4の場合)
guptron

2
man ssh-addmacOS High Sierraによるとssh-add -K、パスフレーズをキーチェーンに保存し、再起動後、を使用するだけssh-add -Aです。パスフレーズを入力する必要はありません。
DawnSong

36

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

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

コマンドライン

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

sudo apt-get install keychain

ファイルを編集

次に、次の行を$ {HOME} /。bashrcまたは/etc/bash.bashrcに追加します。

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh

好奇心から、2番目のコマンドは正確に何をしますか?これは、現在のユーザーに権限を開くだけですか?
Vincent Buscarello、2018年

1
これ.はの別名ですsource
Brad Solomon

18

@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変数に格納してパフォーマンスを向上させます(少なくとも、パフォーマンスが向上すると思います:))

PS:私はLinuxを使用していて、このコードは私の~/.bashrcファイルに移動しました-Mac OS Xを使用している場合は、追加する.zshrcか、.profile

編集:コメントの@Aaronで指摘されているように、.zshrcファイルはzshシェルから使用されます-したがって、それを使用していない場合(わからない場合は、bash代わりに使用している可能性があります)、このコードは.bashrcファイルに移動します。


3
.zshrczsh代わりに使用するシェル用ですbashbashMac OS X(デフォルト)を使用している場合は、.bashrcそこにもあります。
アーロン

1
ssh-add -lリターンコードecho $?キーを追加するか否かを決定するために使用することができます。私のLinuxマシンでbashを使用するssh-add -lと、キーファイル名が出力されません。戻りコードは常に機能します。
Bharat G

12

私の場合、解決策は:

構成ファイルの権限は600にする必要があります。 chmod 600 config

上記のコメントで一般的な意見で述べたように

設定ファイルの内容を変更する必要はありません。


Linux Mint 17.1では十分ではありませんでした。
ベナレス

600は意味がないと思います。man sshは、~/.ssh/configファイルがユーザーに対して読み取り/書き込みであり、他のユーザーによる書き込みはできないことを通知します。
DawnSong

600はユーザーに対してのみ読み取りおよび書き込みが可能
Enthusiasmus

6

Ubuntu 16.04でも同じ問題が発生しました。一部のキーは永続的に追加され、他のキーはssh-addすべてのセッションで実行する必要がありました。永久に追加されたキーにはプライベートキーとパブリックキーの両方が~/.sshあり、すべてのセッションで忘れられたキーには~/.sshdirにプライベートキーしかないことがわかりました。したがって、解決策は簡単です。実行する前に秘密鍵と公開鍵の両方をにコピーする必要があります。~/.sshssh-add

PS:私がGnome wikiから理解している限り、私の方法は、Gnomeデスクトップ環境の一部であるgnome-keyringツールのおかげで機能します。したがって、私の方法は、GnomeまたはGnomeベースのDEを使用する場合にのみ機能するはずです。


1
過小評価された答え。これにより、2時間検索した後、追加のスクリプトやパッケージを必要とせずに問題が解決しました。
etagenklo

フラーキン素晴らしい!素晴らしい探偵の仕事。私はこれを理解したとは思いません。
nicorellius

4

「〜/ .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)"

3

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

  • 開始 seahorse「キー」を検索して見つけたものをまたは起動する
  • そこでSSHキーを作成(またはインポート)
    • パスフレーズを空のままにする必要はありません
    • 公開鍵をサーバー(またはそれ以上)にプッシュすることもできます。
  • ssh-agentが実行され、このキーが読み込まれますが、ロックされます。
  • を使用sshすると、エージェントを介してID(つまり、キー)が取得されます
  • セッション中に初めて使用するときに、パスフレーズがチェックされます
    • ログイン時に自動的にキーのロックを解除するオプションがあります
    • これは、ログイン認証がキーのパスフレーズをラップするために使用されることを意味します
  • 注:IDを転送する場合(つまり、エージェント転送)、sshwithを呼び出す-Aか、それをデフォルトにします。
    • そうしないと、後で3番目のマシンにログインするマシンでは、そのキー認証できません。

3

2つのid_rsaキーを使用してUbuntuを実行しています。(仕事用の個人的なもの)。ssh-addは1つのキー(個人用のキー)を記憶し、会社を毎回忘れます。

2つの違いを確認したところ、私の個人用の鍵には400の権利があり、会社の1つには600の権利があることがわかりました。(u + wがありました)。ユーザーの書き込み権を会社のキー(uwまたは400に設定)から削除すると、問題が解決しました。ssh-addが両方のキーを記憶するようになりました。



1

非常にシンプル^ _ ^ 2つのステップ

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

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

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

12
Ubuntuにはばかばかしいyumはありません;)
Adam F

1

Fishシェルを使用するユーザーは、次の関数を使用して、で、~/.config/fish/config.fishまたは別の構成ファイルで呼び出すことができます~/.config/fish/conf.d/loadsshkeys.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を使用してこれを実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.