Bitbucketにプッシュするたびにパスフレーズを尋ねられるのを避ける方法


217

このガイドの助けを借りてsshのものをセットアップしましたが、以前はうまく機能していました(hg pushパスフレーズを要求されることなく実行できました)。私がまだ同じホームディレクトリを使用していることを考えると、当時と今の間に何が起こり得たでしょう。

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...

回答:


337

sshエージェントを使用する必要があります。短い答え:試してください

$ ssh-add

押す前に。求められたらパスフレーズを入力します。

まだsshエージェントを実行していない場合は、次のメッセージが表示されます。

Could not open a connection to your authentication agent.

その状況では、1つを起動して、環境をこのように設定できます

eval $(ssh-agent)

その後、ssh-addコマンドを繰り返します。

ssh agentのマンページを見てみる価値があります。


2
evalただ入力できるのは何のポイントssh-agentですか?
ジェームズマクマホン

4
使用できるコマンドが表示されますが、実行はされません。eval実行します。
シェパン

元の質問とは関係ありませんが、GitHub、Bitbucketなどでこれらの問題が発生し続ける場合は、httpではなくgit / ssh URLを使用していることを確認してください。
チェコ語

デフォルトのキーがない場合、または複数のキーを追加する場合は、ssh-add /path/to/key
hoosierEE

46

これを解決する方法はssh-agentand を使用することですssh-add

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

この後、現在のセッションのパスフレーズが保存されます。再度質問されることはありません。


7
ほとんどの人は、パスフレーズを盗まれたくありません。
connexo

26

sshキーの管理にキーチェーンを使用します。Debianでも利用可能で、おそらくUbuntuで

apt-get install keychain

こちらがDebianキーチェーンパッケージページです。ご覧のとおり、プロジェクトはあまり活発ではありませんが、私にとってはうまくいきます。私はここで別の答えこれについて少しコメントしました


2
//、これは私のために働いた。ターミナルを開くたびに sshキーのパスワードを入力する必要がないため、ssh-agentよりも優れています。
ネイサンバサニーズ

@NathanBasaneは、キーチェーンを使用すると、ターミナルを開くたびにsshキーのパスワードを入力する必要がないと言っていますか?どのように設定しますか?キーチェーンは端末を開くたびにパスワードを要求し続けるため、起動後に初めて開いたときだけですが、それでもです。毎回パスフレーズを入力したくありません。
m4l490n

@ m4l490nいいえ、キーチェーンを使用している場合は、ターミナルを開くたびにsshキーのパスワードを入力する必要はありません。ただし、起動後に一度入力する必要があります。パスフレーズはディスクに保存されません-安全ではありません。
ファヒムミタ

私にとっては、ログインするたびに尋ねます(リモートサーバーにgitリポジトリ+ sshキーがあり、「git pull」を行うたびにパスフレーズを入力する必要があります)
Martin Thoma

@MartinThomaそれは間違っているようです。.sshが正しく構成されていることを確認してください。特に、シェルは正しく構成されていますか?それでも機能しない場合、またはそれを理解できない場合は、質問することができます。
ファヒームミサ

13

次の〜/ .ssh / configファイルを作成(または存在する場合は編集)します。

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

しかし、私はすべてのサービスに異なるキーのペアを使用しています
...-connexo

@connexoでは、ワイルドカードのアスタリスクを個々のホスト名に、「id_rsa」を対応する秘密鍵に置き換えることができます
ness-EE

1
IgnoreUnknown AddKeysToAgent,UseKeychainすぐ上に追加する必要がありましたUseKeychain yes
consideRatio

1
「UseKeychain yes」行に「Bad configuration option:usekeychain」というエラーが表示されます。
m4l490n

@ m4l490n:このUseKeychainオプションはOpenSSH 7.1p2(2016-02-28)で追加されたようです。たぶん、あなたは前のバージョンを持っています。 openssh.com/txt/release-7.2
チュス

6

便宜上、最適な方法はjmtdFaheemの回答の組み合わせです。

ssh-agent単独で使用すると、ssh-agent新しい端末を開くたびに新しいインスタンスを作成する必要があります。keychain初期化すると、秘密鍵のパスフレーズが要求され、保存されます。そうすれば、秘密鍵はパスワードで保護されますが、パスワードを何度も入力する必要はありません。

アーチのwikiにはからキーチェーンの初期化をお勧め/etc/profile.d/のような、または自分のシェルプロファイルを.bash_profile.bashrc。これには、端末を開くとすぐにキーチェーンが初期化されるという欠点があります。

より柔軟なアプローチはkeychain、特定のtmuxセッションと組み合わせることです。だから、で.bash_profile

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

...そして、tmux必要に応じて(キーバインドから起動された)セキュリティ保護されたセッションを開始するだけです。

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

これで、キーチェーンは特定のtmuxセッションを開始するときに一度だけ初期化されます。そのセッションが続く限り、これらのsshキーにアクセスし、リモートリポジトリにプッシュできます。


これをリモートマシンで動作させるにはどうすればよいですか?2番目のスクリプトを変更して$ SSH_CLIENTを確認し、存在する場合はurxvtcを実行せず、tmuxのみを実行します。それは機能しますが、問題は.bash_profile部分です。ボックスに初めてログインすると、「tmux ls」の出力である「server not found:Connection refused」と表示されます。次に、2番目のスクリプトを実行すると、tmuxは新しいセッションを開始するか、既存のセッションにアタッチしますが、キーチェーンプロンプトは表示されません。その後、セッションを終了すると、キーチェーンプロンプトが待機しています。
jonyamo

セッションがない場合のtmux出力を無音にするための回答を更新しました。
jasonwryan

ありがとう、それでもキーチェーンの問題は解決しませんでした。tmuxは新しいセッションを作成しますが、空のプロンプトに直接進みます。tmuxセッションを終了したときのみ、パスフレーズを要求するキーチェーンプロンプトが表示されます。
jonyamo

キーチェーンは.bash_profileでのみ実行されるため、キーチェーンを言うのをやめるべきだと思います。問題は、ssh-addの実行にあります。ただし、tmuxセッションの作成後にssh-addを手動で実行すると、機能します。
jonyamo

1
2番目のスクリプトをスキップして、セキュリティ保護されたtmuxセッションを開始します.profile。ログインするとすぐにキーのプロンプトが表示されます。
jasonwryan

0

以下を使用できますsshpass

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

sshpass -p yourpassphrase通常のsshコマンドを追加する前に追加するだけです。


2
それは本当に愚かなアイデアのように聞こえます。これにより、パスワードがシェル履歴にクリアテキストで表示されませんか?
connexo

正確ですが、パスワードでセッションを保護することになっていないのですか?
ベルカ

1
たとえそうだとしても、同僚があなたの隣に座って、あなた/あなたから学ぶのを手伝っていますか?
connexo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.