Koch deploy_resource privaten repo -, ssh-Schlüssel bereitstellen und ssh_wrapper
Ich bin mit Lasten von Mühe, mein Chef Rezept-Klon ein eigenes repo. Gut, ich hatte ihn die Arbeit gestern, aber nach 'cheffin' mein Vagrant box ein halbes Dutzend mal, ich habe es gebrochen. Ich bin ein Koch-Neuling, wie man sich vorstellen kann.
Folgenden die deploy_resource Anleitung hier, habe ich mein bereitstellen.rb Rezept (gekürzt):
deploy_branch "/var/www/html/ps" do
repo git@github.com:simonmorley/private-v2.git
ssh_wrapper "/tmp/.ssh/chef_ssh_deploy_wrapper.sh"
branch "rails4"
migrate false
environment "RAILS_ENV" => node[:ps][:rails_env]
purge_before_symlink %w{conf data log tmp public/system public/assets}
create_dirs_before_symlink []
symlinks( # the arrow is sort of reversed:
"conf" => "conf", # current/conf -> shared/conf
"data" => "data", # current/data -> shared/data
"log" => "log", # current/log -> shared/log
"tmp" => "tmp", # current/tmp -> shared/tmp
"system" => "public/system", # current/public/system -> shared/system
"assets" => "public/assets" # current/public/assets -> shared/assets
)
scm_provider Chef::Provider::Git # is the default, for svn: Chef::Provider::Subversion
notifies :restart, "service[ps]"
notifies :restart, "service[nginx]"
end
Standardeinstellungen, ich habe Folgendes zu erstellen, der dirs etc.
directory "/tmp/.ssh" do
action :create
owner node[:base][:username]
group node[:base][:username]
recursive true
end
template "/tmp/.ssh/chef_ssh_deploy_wrapper.sh" do
source "chef_ssh_deploy_wrapper.sh.erb"
owner node[:base][:username]
mode 0770
end
# Put SSH private key to be used with SSH wrapper
template "/tmp/.ssh/id_deploy" do
source "id_rsa.pub.erb"
owner node[:base][:username]
mode 0600
end
Und in die wrapper:
#!/bin/sh
exec ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i "/tmp/.ssh/id_deploy" "$@"
Und ich haben einen öffentlichen Schlüssel hochgeladen und diese auf github.
Wenn ich bereitstellen das Rezept, es gibt mir eine Fehlermeldung:
deploy_branch[/var/www/html/ps] action deployEnter passphrase for key '/tmp/.ssh/id_deploy':
Obvs, ich habe kein Passwort eingestellt... Der private Schlüssel muss daher fehlt..
Nur durch Zufall, habe ich entfernt, die id_deploy Schlüssel aus dem Rezept, die Ordner gelöscht und es lief wieder. Niedrige und siehe da, es begann... Der Grund dafür ist, dass die id_rsa.pub && id_rsa Dateien wurden in /root/.ein.ssh aus, wenn ich manuell erzeugt, Sie zu testen.
Verstehe ich nicht, was ich falsch mache hier. Meine Fragen sind daher:
- Brauche ich einen privaten und öffentlichen Schlüssel auf jedem Knoten ich bereitstellen? Die docs nicht erwähnen.
- Sollte dies nicht implementieren als nicht-root-Benutzer? Ich habe einen user in meine Rollen Datei..
- Warum ist die ssh_wrapper nicht tut, was es soll
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dauerte es einige Tage, um dies herauszufinden, richtig.
Nur zu klären, dies ist, was ich Tat, es zu beheben. Ich weiß nicht, ob es richtig ist, aber es funktioniert für mich.
Generieren öffentliche und private Schlüssel nach diesem tutorial.
Fügen Sie den öffentlichen Schlüssel auf dem Github-repo, das Sie Klonen möchten.
Erstellen Sie eine Vorlage in mein Standard-Rezept, die sowohl die öffentlichen und privaten Schlüssel. Siehe unten.
Erstellt die entsprechenden templates für die Kneipe und private Schlüssel.
Erstellt die chef_ssh_deploy_wrapper.sh.erb-Datei (siehe unten)
Erstellt bereitstellen.rb Rezept (siehe unten)
Hochgeladen und Hinzugefügt, die Rezepte zu meiner Rolle. Ran chef-client.
Hey presto! Lehnen Sie sich zurück mit einem Bier und beobachten Sie Ihre repo. schlau, kloniert in den dir.
Die templates sind wie folgt:
Erstellen der Verzeichnisse und Vorlagen:
Erstellen Sie einen ssh-wrapper chef_ssh_deploy_wrapper.erb
(Stellen Sie sicher, dass Sie den privaten Schlüssel hier, oder es wird scheitern)
Schließlich die Bereitstellung.rb Rezept:
Die vor dem Neustart hat seit ersetzt worden, wie wir waren, zunächst kompilieren von ruby aus dem Quellcode aber beschlossen, rvm am Ende. Viel einfacher für multi-user-Installationen.
NB: ich bin die Bereitstellung als sudo-Benutzer, wenn Sie so tun als root (vermeiden), verwenden Sie die /root/.ein.ssh-Pfad statt.
Nahm ich viel inspiration aus dieser Artikel.
Viel Glück, ich hoffe, das jemand hilft.
Ihre Frage nicht mit einem link zu der
deploy_resource
Quelle, ich kann also nicht sicher sein, ob das gilt, aber wenn es verwendet einegit
Ressource unterhalb, kann Folgendes hilfreich sein...Wie beschrieben in diese Antwort auf eine ähnliche Frage, können Sie vermeiden, die zusätzliche Skript-Dateien zu gehen, mit jedem SSH-Schlüssel durch hinzufügen des SSH-Kommando als eine "externe transport" Teil der repository-URL: