Capistrano und mehrere SSH-Schlüssel

Lesezeit: 4 Minuten

Capistrano und mehrere SSH Schlussel
MrB

Ich brauche Capistrano, um 2 verschiedene SSH-Schlüssel zu verwenden. Einer ist für das Git-Repository und einer für den Server, auf dem bereitgestellt werden soll.

Welchen Schlüssel ich in meinem .ssh-Ordner in id_rsa umbenenne, funktioniert. Der andere nicht. Wenn ich den Git-Schlüssel in id_rsa umbenenne, kann Capistrano eine Verbindung zum Git-Repository herstellen, sich dann jedoch nicht beim Bereitstellungsserver authentifizieren. Wenn ich es anders nenne, kann es keine Verbindung zum Git-Repo herstellen. Ich weiß, dass der andere Schlüssel funktioniert, da ich ssh -i ~/.ssh/otherKey.pem ausführen kann und er erfolgreich eine Verbindung zum Server herstellt.

Dies ist, was ich in meiner Datei deploy.rb Capistrano habe.

ssh_options[:keys] = [
        File.join(ENV["HOME"], ".ssh", "id_rsa"),
        File.join(ENV["HOME"], ".ssh", "deploy")
    ]

ssh_options[:forward_agent] = true 

Wie kann ich Capistrano anweisen, BEIDE Schlüssel zu verwenden? Es scheint nur das mit dem Namen id_rsa zu verwenden.

bearbeiten:

Hier ist die Ausgabe von Capistrano mit der Fehlermeldung:

$ 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

bearbeiten:

Eine andere Sache: Es funktioniert von meinem lokalen Computer aus einwandfrei, nur nicht auf dem Deploy-Server – mit genau den gleichen Konfigurationsdateien! Es scheint, dass Capistrano die richtigen Schlüssel auf meinem lokalen Computer verwendet, aber nicht auf dem Bereitstellungscomputer.

  • Haben Sie dieses Problem jemals erkannt? Ich habe das gleiche.

    – Stephen Burke

    17. Januar ’15 um 2:09

Haftungsausschluss: Ich weiß nichts über Capistrano.

Wenn es einfach normal ist ssh Anrufe (oder Anrufe git um dies zu tun), können Sie den richtigen Schlüssel für die Verwendung in Ihrem . konfigurieren ~/.ssh/config auf einer Basis pro Host (oder pro Host-Alias).

Zum Beispiel habe ich diese Zeilen in meinem ~/.ssh/config Datei:

# 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

  • Hallo, danke für die Idee. Ich habe es so eingerichtet, dass sich ‘ssh deploy.server.com’ direkt mit dem Deploy-Server verbindet. Trotzdem scheitert Capistrano bei der Authentifizierung bei deploy.server.com – es ist buchstäblich dieselbe URL. 🙁 Noch andere Ideen?

    – MrB

    24. August ’11 um 17:14

  • Könnte es sein, dass Capistrano irgendwie den falschen Benutzernamen festlegt? Ein SSH-Benutzername auf der Befehlszeile überschreibt den in der Konfigurationsdatei. Abgesehen davon kann das Anzeigen der Fehlermeldung (falls vorhanden) und möglicherweise einer Debug-Ausgabe helfen.

    – Paŭlo Ebermann

    24. August ’11 um 17:28

  • Das könnte möglich sein, welcher Benutzername wäre das/wie teste ich das? Ich habe den Benutzernamen mit set :user eingestellt, er sollte stimmen. Aber selbst wenn ich das auskommentiere, funktioniert es nicht. Ich habe die gesamte Cap-Ausgabe zur ursprünglichen Frage hinzugefügt.

    – MrB

    24. August ’11 um 17:50

Ich habe diese Zeile in deploy.rb:

ssh_options[:keys] = %w(/Users/victor.pudeyev/ec2/MBP-2.pem)

Dies deutet darauf hin, dass die Schlüsseldateinamen durch Leerzeichen getrennt sind, z

ssh_options[:keys] = %w(/Users/victor.pudeyev/ec2/MBP-1.pem /Users/victor.pudeyev/ec2/MBP-2.pem)

  • %w(…) erstellt ein Array von Strings mit durch Leerzeichen getrennten Token, also kann dies nicht das Problem sein

    – Emirikol

    21. Apr. ’15 um 7:32

  • undefinierte lokale Variable oder Methode `ssh_options’ , möglicherweise wurde dies in neueren Versionen geändert

    – Zia Ul Rehman Mughal

    2. Juni ’17 um 12:18

Ich hatte dieses Problem und hatte die ssh-Weiterleitung im Capfile eingestellt. Wenn das entfernt wurde, konnte die Zielbox ihre eigenen Schlüssel verwenden

Ein bisschen spät zur Party hier, aber eine Möglichkeit besteht darin, etwas Rubinkleber zu verwenden, um zu erkennen, welche Datei verwendet werden soll:

['~/.ssh/onekey.pem','~/.ssh/id_rsa'].each do |name|
  if File.exists?(File.expand_path(name))
    ssh_options[:keys] ||= name
  end
end

.

400980cookie-checkCapistrano und mehrere SSH-Schlüssel

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy