回答:
ssh-add
必要がありssh-agent
ます(OK、更新された質問に応答して、Jefromiが説明したようにssh-keygen
、最初に実行して公開鍵と秘密鍵を生成します。公開鍵をサーバーに配置します。プレーンの同等のものがない場合は、パスフレーズを使用する必要があります。 -秘密鍵のテキストパスワード。ただし、その場合は、以下で説明するように、実際的な問題として必要になります。) ssh-agent
ssh-agent
ログイン時にバックグラウンドで実行する必要があります。ログインしたらssh-add
、キーをデコードするためにエージェントにパスフレーズを提供するために、一度だけ実行するのが1つの考え方です。その後、エージェントはキーをロック解除してロードした状態でメモリに格納され、どこかでsshを実行するたびに使用できるようになります。
すべてのssh-familyコマンド1はエージェントに問い合わせ、自動的に秘密鍵を使用できるようにします。
OSX(err、macOS)では、GNOMEおよびKDEシステムssh-agent
は通常、自動的に起動されます。私と同じように、Cygwinやその他のWindows環境を使用している場合に備えて、詳細を確認します。
ここから開始:man ssh-agent
。
エージェントを自動的に実行するには、さまざまな方法があります。manページで説明されているように、それを実行して、ログインセッションの他のすべてのプロセスの親になるようにすることができます。そうすれば、それが提供する環境変数は自動的にすべてのシェルに含まれます。あなたが(後で)呼び出すssh-add
かssh
、または両方がエージェントにアクセスできるようになると、それらはすべて魔法のソケットパス名などの環境変数を持っているからです。
または、エージェントを通常の子として実行し、環境設定をファイルに保存して、起動時にすべてのシェルでそのファイルを読み込むことができます。
私のOSXとUbuntuシステムは自動的にエージェント起動セットアップを行うので、私がしなければならないことはssh-add
1回実行するだけです。実行ssh-add
してみて、機能するかどうかを確認します。機能する場合は、再起動ごとに1回実行するだけです。
私のCygwinシステムはそれを手動で行う必要があったので、私はこれを自分で.profile
行い、.bashrc
ソースがあります.profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
.agent
ファイルは、スクリプトによって自動的に作成されます。環境変数の定義とエクスポートが含まれています。上記は.agentファイルのソースを試み、次にps(1)
エージェントを試みます。動作しない場合は、エージェントを起動し、新しいエージェントファイルを作成します。単に実行することもできssh-add
、失敗した場合はエージェントを起動します。
sudo
正しいpam拡張子を持つローカルとリモートでさえ。
ssh-agent
、それは滑らかな印象の使用にはおそらくです:eval `ssh-agent`
HTTPSプロトコルを使用していたため、GitHubにも同様の問題がありました。使用しているプロトコルを確認するには、次を実行します
git config -l
で始まる行を見てくださいremote.origin.url
。プロトコルを切り替えるには
git config remote.origin.url git@github.com:your_username/your_project.git
Permission denied
エラー。
git remote set-url origin git@github.com:your_username/your_project.git
これはgitではなくsshの設定に関するものです。まだ行っていない場合は、ssh-keygen
(空白のパスフレーズを使用して)を使用してキーペアを作成する必要があります。次に、を使用して公開鍵をリモート宛先にコピーしssh-copy-id
ます。複数のキーが必要な場合(他の目的でパスフレーズを使用したより安全なキーなど)や、非常に奇妙なマルチIDの処理が行われている場合を除いて、これは簡単です。
ssh-keygen # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host
編集:あなたは本当にDigitalRossの答えを読むべきですが、パスフレーズでキーを使用する場合は、を使用ssh-add <key-file>
してそれらを追加する必要がありますssh-agent
(そしてssh-agent
、ディストリビューションでまだ実行されているものがない場合は、明らかに起動します)。
ssh-agent
パスフレーズを入力するたびに問題を回避したいからです。反対投票ではありませんが、私が誤解していない限り、この回答を改善する必要があると思います...
ssh-agent
。あなたに+1!
ssh-*
、キーを使用するために必要なパスフレーズと呼ばれるもので、実際にリモートの実際のユーザーパスワードを意味しているのでしょうか。
HTTPSを使用してクローンを作成した場合(推奨):-
git config --global credential.helper cache
その後
git config --global credential.helper 'cache --timeout=2592000'
timeout = 2592000(30日(秒))は、30日間のキャッシュを有効にします(または任意のスイート)。
次に、ユーザー名とパスワードを要求する単純なgitコマンドを実行します。
資格情報を1回入力すると、キャッシュが30日間有効になります。
gitコマンドを使用して再試行すると、資格情報は必要ありません。
注:認証ヘルパーを使用するには、Git 1.7.10以降が必要です。システムの再起動時に、パスワードの再入力が必要になる場合があります。
git-bashやターミナルでコマンドを実行するよりも直接ファイルを編集したい人のためにMueinの考えを拡張します。
プロジェクトの.gitディレクトリ(ローカルマシンのプロジェクトルート)に移動し、「config」ファイルを開きます。次に、[remote "origin"]を探し、URL構成を次のように設定します。
[remote "origin"]
#the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
url = git@github.com:<username>/<projectname>.git
ここには2つの異なる点があると思います。1つ目は、通常のSSH認証では、ユーザーがアカウントのパスワードを入力する必要があることです(アカウントパスワードは、sshd構成に応じて、さまざまな方法で認証されます)。
証明書を使用してそのパスワードを入力することを回避できます。証明書を使用する場合でもパスワードを入力する必要がありますが、今回は秘密鍵のパスワードです(アカウントのパスワードとは無関係です)。
これを行うには、steveth45によって指摘された指示に従うことができます。
毎回証明書のパスワードを入力したくない場合は、DigitalRossによって指摘されているように、ssh-agentを使用できます。
これを行う正確な方法は、UnixとWindowsによって異なりますが、基本的にはログイン時にssh-agentをバックグラウンドで実行し、次に初めてログインしたときにssh-addを実行してエージェントにパスフレーズを与える必要があります。次に、すべてのssh-familyコマンドがエージェントに問い合わせて、パスフレーズを自動的に取得します。
ここから開始:man ssh-agent。
ssh-agentの唯一の問題は、少なくとも* nixでは、すべての新しいシェルに証明書パスワードを設定する必要があることです。そして、証明書が「ロード」され、それを使用して、どのような種類のパスワードも入力せずにsshサーバーに対して認証できます。しかし、これはその特定のシェルにあります。
ではキーチェーンあなたはssh-agentのが、「システム全体」と同じことを行うことができます。コンピューターの電源を入れたら、シェルを開き、証明書のパスワードを入力します。そして、他のすべてのシェルはその「ロードされた」証明書を使用し、PCを再起動するまでパスワードが要求されることはありません。
Gnomeには、Gnome Keyringと呼ばれる同様のアプリケーションがあり、最初に使用するときに証明書のパスワードを要求し、次にそれを安全に保存するので、再度要求されることはありません。
AddKeysToAgent yes
.ssh / configに書き込む方法はもう1つあります。その後、コンピュータの電源を切るまでメモリに読み込まれます
あなたがgithubを使っているなら、彼らはそれをより明確に説明するとても素晴らしいチュートリアルを持っています(少なくとも私には)。
ssh-keygen -t rsa
パスフレーズを求められたら、空白のままにします。つまり、Enterキーを押します。とても簡単です!!
ログインvie sshキーを許可せず、ユーザー/パスワードのみを使用するサーバーからgitリポジトリを複製する必要がありました。単純なユーザー/パスワードの組み合わせを使用するようにGitプラグインを構成する方法が見つからなかったため、次のシェルコマンドを、ツールexpect(apt-get install expect)に依存するLinuxビルドマシンの事前ビルドステップとして追加しました。
これは、JENKINSジョブの構成とログに明確なテキストとしてパスワードが表示されるため、この問題を解決する良い方法ではありません。RSAキー認証またはその他の構成の可能性を構成する方法がない場合にのみ使用してください。
rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
AddKeysToAgent yes
.ssh / configファイルの先頭に1行追加します。もちろん、ssh-agentが事前に実行されている必要があります。実行されていない場合は(で確認prep ssh-agent
)、単に実行してくださいeval $(ssh-agent)
これで、キーがシステム全体でメモリに読み込まれ、パスフレーズを再度入力する必要がなくなりました。
ソリューションのソースは/ubuntu/362280/enter-ssh-passphrase-once/853578#853578です。
また、Windowsでsshを使用しているため、パスフレーズを常に入力しないようにしています。特定のセッションでパスフレーズ1を入力できるように、.profileファイルを変更しました。これはコードの一部です:
SSH_ENV="$HOME/.ssh/environment"
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" > /dev/null
ssh-add
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $? -eq 0 ]; then
ssh-add
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
これで、セッションで一度パスフレーズを入力します。
私はこれらすべての提案などを試しましたが、AWSインスタンスからgit cloneできるようにしました。何もうまくいきませんでした。私はやっと必死にだまされました:ローカルマシンにid_rsa.pubの内容をコピーし、それをAWSインスタンスの〜/ .ssh / known_hostsに追加しました。