Wie konfiguriere ich Fabric für die Verbindung mit Remote-Hosts mithilfe von SSH-Schlüsseldateien (z. B. Amazon EC2-Instanzen)?
100
Erwähnenswert ist hier auch, dass Sie die Befehlszeilenargumente dafür verwenden können:
fab command -i /path/to/key.pem [-H [user@]host[:port]]
Das Finden einer einfachen Fabdatei mit einem funktionierenden Beispiel für die Verwendung von SSH-Schlüsseldateien ist aus irgendeinem Grund nicht einfach. Ich habe einen Blog-Beitrag darüber geschrieben ( mit einem passenden Inhalt ).
Grundsätzlich geht die Verwendung ungefähr so:
from fabric.api import *
env.hosts = ['host.name.com']
env.user = 'user'
env.key_filename = '/path/to/keyfile.pem'
def local_uname():
local('uname -a')
def remote_uname():
run('uname -a')
Der wichtige Teil ist das Festlegen der env.key_filename
Umgebungsvariablen, damit die Paramiko-Konfiguration beim Herstellen einer Verbindung danach suchen kann.
env.key_filename
kann eine Liste von Zeichenfolgen enthalten , um mehrere Schlüsseldateien für eine Verbindung zu testen.settings
Kontext - Manager und konnte es nicht die key_filename zu erkennen , bis ich geändert ,key_filename='/path/to/key'
umkey_filename=['/path/to/key']
so , wenn jemand Schwierigkeiten hat, so dass key_filename eine Liste von Schlüsseln könnte es beheben. Dies ist mit Fab 1.10.1 und Paramiko 1.15.2Eine weitere coole Funktion, die ab Fabric 1.4 verfügbar ist - Fabric unterstützt jetzt SSH-Konfigurationen .
Wenn Sie bereits alle SSH-Verbindungsparameter in Ihrer
~/.ssh/config
Datei haben, wird Fabric diese nativ unterstützen. Sie müssen lediglich Folgendes hinzufügen:am Anfang deines Fabfiles.
quelle
IOError: [Errno 2] No such file or directory: ' /path/to/.ssh/key'
oderLogin password for ' root':
nur sicherstellen, dass Sie keine Leerzeichen in Ihrem haben.ssh/config
. Es ist zum BeispielUser=root
anstelle vonUser = root
...Verwenden Sie für Fabric2 in Fabfile Folgendes:
und führen Sie es aus mit:
UPDATE:
Für mehrere Hosts (ein Host reicht auch) können Sie Folgendes verwenden:
und starte es mit fab oder fab2:
quelle
staging
Aufgabe unterstützen?Bei mir hat folgendes nicht funktioniert:
oder
Folgendes tat jedoch:
oder
quelle
env.user="ubuntu"
anstelle von verwendenenv.user=["ubuntu"]
.Ich musste dies heute tun, meine .py-Datei war so einfach wie möglich, wie die in der Antwort von @YuvalAdam veröffentlichte, aber ich wurde trotzdem immer wieder zur Eingabe eines Passworts aufgefordert ...
Beim Betrachten des
paramiko
Protokolls (der von Fabric für SSH verwendeten Bibliothek) fand ich die folgende Zeile:Ich habe aktualisiert
paramiko
mit:Und jetzt funktioniert es.
quelle
Wie oben erwähnt, unterstützt Fabric die Einstellungen für .ssh / config-Dateien auf eine bestimmte Weise, aber die Verwendung einer PEM-Datei für ec2 scheint problematisch zu sein. IOW Eine ordnungsgemäß eingerichtete .ssh / config-Datei funktioniert über die Befehlszeile über 'ssh servername' und funktioniert nicht mit 'fab sometask', wenn env.host = ['servername'].
Dies wurde überwunden, indem in meiner fabfile.py die Datei env.key_filename = 'keyfile' angegeben und der Eintrag IdentityFile bereits in meiner .ssh / config dupliziert wurde.
Dies kann entweder Fabric oder paramiko sein, in meinem Fall Fabric 1.5.3 und Paramiko 1.9.0.
quelle
Keine dieser Antworten funktionierte für mich unter py3.7, Fabric2.5.0 und Paramiko 2.7.1.
Die Verwendung des PKey-Attributs in der Dokumentation funktioniert jedoch: http://docs.fabfile.org/en/2.5/concepts/authentication.html#private-key-objects
quelle