2つの異なるSSHキーを使用するにはCapistranoが必要です。 1つはgitリポジトリ用で、もう1つはサーバーのデプロイ先です。
.sshフォルダーで名前をid_rsaに変更したキーはどちらでも機能します。もう1つはそうではありません。 gitキーの名前をid_rsaに変更すると、Capistranoはgitリポジトリに接続できますが、デプロイするサーバーで認証できません。それを別の名前で呼ぶと、gitリポジトリに接続できなくなります。他のキーが機能することはわかっています。ssh-i〜/.ssh/otherKey.pemを実行すると、サーバーに正常に接続できるからです。
これは、deploy.rbCapistranoファイルにあるものです。
ssh_options[:keys] = [
File.join(ENV["HOME"], ".ssh", "id_rsa"),
File.join(ENV["HOME"], ".ssh", "deploy")
]
ssh_options[:forward_agent] = true
Capistranoに両方のキーを使用するように指示するにはどうすればよいですか? id_rsaと呼ばれるものだけを使用しているようです。
編集:
エラーメッセージ付きのカピストラーノからの出力は次のとおりです。
$ cap yii deploy
* executing `yii'
Yii
* executing `deploy'
* executing `deploy:update'
** transaction: start
* executing `deploy:update_code'
executing locally: "git ls-remote [email protected]:/projectyii.git HEAD"
* executing "git clone -q [email protected]:/projectyii.git /var/www/projectyii-trunk/releases/20110824174629 && cd /var/www/projectyii-trunk/releases/20110824174629 && git checkout -q -b deploy 5e14521285ca04a605353e97bdf31c3a2889dbfb && (echo 5e14521285ca04a605353e97bdf31c3a2889dbfb > /var/www/projectyii-trunk/releases/20110824174629/REVISION)"
servers: ["yii.project.com"]
[yii.project.com] executing command
** [yii.project.com :: err] Error reading response length from authentication socket.
** [yii.project.com :: err] Permission denied (publickey,keyboard-interactive).
** [yii.project.com :: err] fatal: The remote end hung up unexpectedly
command finished
*** [deploy:update_code] rolling back
* executing "rm -rf /var/www/projectyii-trunk/releases/20110824174629; true"
servers: ["yii.project.com"]
[yii.project.com] executing command
command finished
failed: "sh -c \"git clone -q [email protected]:/projectyii.git /var/www/projectyii-trunk/releases/20110824174629 && cd /var/www/projectyii-trunk/releases/20110824174629 && git checkout -q -b deploy 5e14521285ca04a605353e97bdf31c3a2889dbfb && (echo 5e14521285ca04a605353e97bdf31c3a2889dbfb > /var/www/projectyii-trunk/releases/20110824174629/REVISION)\"" on yii.project.com
編集:
もう1つ、デプロイサーバーではなく、ローカルマシンから完全に正常に機能します。まったく同じ構成ファイルを使用します。 Capistranoはローカルマシンでは正しいキーを使用しているようですが、デプロイマシンでは使用していません。
免責事項:私はキャピストラーノについて何も知りません。
通常のssh
呼び出しを行う(またはこれを行うためにgit
を呼び出す)場合は、ホストごと(またはホストごと)の~/.ssh/config
で使用する正しいキーを構成できますホストエイリアス)ベース。
たとえば、~/.ssh/config
ファイルに次の行があります。
# Git bei Github
Host github.com
User git
IdentityFile ~/.ssh/svn_id_rsa
# Andere Mathe-Hosts
Host *.math.hu-berlin.de
User ebermann
IdentityFile ~/.ssh/id_rsa
ControlMaster auto
私はdeploy.rbにこの行があります:
ssh_options[:keys] = %w(/Users/victor.pudeyev/ec2/MBP-2.pem)
これは、キーファイル名がスペースで区切られていることを示しています。
ssh_options[:keys] = %w(/Users/victor.pudeyev/ec2/MBP-1.pem /Users/victor.pudeyev/ec2/MBP-2.pem)
この問題が発生し、capfileにssh転送が設定されました。それを削除すると、ターゲットボックスが独自のキーを使用できるようになります
ここでのパーティーには少し遅れていますが、1つのオプションは、使用するファイルを検出するためにRuby glueを少し使用することです。
['~/.ssh/onekey.pem','~/.ssh/id_rsa'].each do |name|
if File.exists?(File.expand_path(name))
ssh_options[:keys] ||= name
end
end