コンピューターを再起動するたびにgit clone git@...
(sshを使用)を実行していたときに、SSHパスフレーズを挿入するためのテキストボックスを含むウィンドウダイアログが表示され、[OK]で確認しました。その後、システムを次回起動するまでパスフレーズは不要になりました。
Ubuntu 13.10にアップグレードすると、そのウィンドウは表示されなくなりますが、ターミナルにメッセージが表示されます。
Enter passphrase for key '/home/username/.ssh/id_rsa':
... Gitリポジトリを複製するたびに、これが表示されます。
どうすれば修正できますか?パスフレーズを1回だけ入力したい。
更新:13.10からのバグのようです:
https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169
とにかく次のコマンドを実行すると、問題が修正されました。
次のコマンドを入力して、これを修正しました。
$ ssh-agent bash
これにより、秘密鍵を追加できる新しいbashプロセスが作成されます。新しい秘密鍵を追加するとき、パスフレーズの入力を一度だけ求められます。
その後:
$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa:
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
...ここでusername
はユーザー名です。 $USER
変数を使用して同じことを行うことができます。
$ ssh-add /home/$USER/.ssh/id_rsa
または、ホームディレクトリに~
を使用するだけです。
$ ssh-add ~/.ssh/id_rsa
そして、問題は修正されました。
.ssh/config
を最初に1行追加します。
AddKeysToAgent yes
git/ssh/...を実行します。それが十分でない場合は、sshのバージョンを確認し、ssh-agentに次の指示が読み込まれていることを確認します。
まず、sshのバージョンを確認してください。 7.2以上 でなければなりません。
ssh -V
その場合は、.ssh/config
を最初に1行追加するだけです。
AddKeysToAgent yes
通常、ディストリビューションはssh-agentを自動的にロードします。確認するには、実行します
ps aux | grep -v grep | grep ssh-agent
それを含む行が表示されない場合は、次を実行してロードする必要があります。
eval $(ssh-agent)
これにより、現在の端末でのみエージェントが有効になるため、すべての場所で有効にするには、~/.profile
ファイルにこの行を追加して再起動してみてください。
このアトラシアンのドキュメント Ubuntu 14.04 Server Editionの問題を修正しました:
この値を.bashrc
ファイルに追加するだけです:
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
そして、ログイン後、パスワードを1回だけ要求し、キャッシュします。毎回入力する必要はありません。
このバグ の回避策は、~/.bashrc
の最後に以下を追加することです
eval `gnome-keyring-daemon --start`
fish Shell のユーザーは、この script を使用して同じことを行うことができます。
# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment
function start_agent
echo "Initializing new SSH agent ..."
ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
echo "succeeded"
chmod 600 $SSH_ENV
. $SSH_ENV > /dev/null
ssh-add
end
function test_identities
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $status -eq 0 ]
ssh-add
if [ $status -eq 2 ]
start_agent
end
end
end
if [ -n "$SSH_AGENT_PID" ]
ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
if [ $status -eq 0 ]
test_identities
end
else
if [ -f $SSH_ENV ]
. $SSH_ENV > /dev/null
end
ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
if [ $status -eq 0 ]
test_identities
else
start_agent
end
end
Azure .ppkファイルを使用する場合
それをpemに変換し、簡単な手順で許可400を追加するだけです:
Sudo apt-get install PuTTY
puttygen <path_to_key>/keyname.ppk -O private-openssh -o <path>/aws_key.pem
Sudo chmod 400 <path>/aws_key.pem
ssh -vi aws_key.pem ubuntu@<ip_address>
私はこれを使用します:
vim ~/.profile
eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO