Jak skonfigurować sieć szkieletową do łączenia się ze zdalnymi hostami przy użyciu plików kluczy SSH (na przykład instancji Amazon EC2)?
100
Warto tutaj również wspomnieć, że możesz użyć do tego argumentów wiersza poleceń:
fab command -i /path/to/key.pem [-H [user@]host[:port]]
Znalezienie prostego pliku fabfile z działającym przykładem użycia pliku klucza SSH nie jest łatwe z jakiegoś powodu. Napisałem o tym post na blogu ( z pasującą treścią ).
Zasadniczo użycie wygląda mniej więcej tak:
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')
Ważną częścią jest ustawienie env.key_filename
zmiennej środowiskowej, aby konfiguracja Paramiko mogła jej szukać podczas łączenia.
env.key_filename
może zawierać listę łańcuchów do wypróbowania wielu plików kluczy dla połączenia.settings
menedżera kontekstu i nie mogłem go rozpoznać key_filename, dopóki nie zmieniłem gokey_filename='/path/to/key'
na,key_filename=['/path/to/key']
więc jeśli ktoś ma problem, utworzenie key_filename na liście kluczy może to naprawić. To jest z fab 1.10.1 i Paramiko 1.15.2Kolejna fajna funkcja dostępna od Fabric 1.4 - Fabric obsługuje teraz konfiguracje SSH .
Jeśli masz już wszystkie parametry połączenia SSH w swoim
~/.ssh/config
pliku, Fabric będzie je obsługiwał natywnie, wystarczy, że dodasz:na początku twojego pliku fabfile.
źródło
IOError: [Errno 2] No such file or directory: ' /path/to/.ssh/key'
lubLogin password for ' root':
po prostu upewnij się, że nie masz białych znaków w pliku.ssh/config
. Na przykładUser=root
zamiastUser = root
...W przypadku tkaniny 2 w pliku fabfile użyj następującego:
i uruchom go z:
AKTUALIZACJA:
W przypadku wielu hostów (jeden host też to zrobi) możesz użyć tego:
i uruchom go z fab lub fab2:
źródło
staging
zadaniu?U mnie nie zadziałało:
lub
Jednak zrobiły to:
lub
źródło
env.user="ubuntu"
zamiastenv.user=["ubuntu"]
.Musiałem to zrobić dzisiaj, mój plik .py był tak prosty, jak to tylko możliwe, jak ten opublikowany w odpowiedzi @YuvalAdam, ale wciąż otrzymywałem monit o hasło ...
Patrząc na
paramiko
dziennik (bibliotekę używaną przez Fabric dla ssh), znalazłem wiersz:Zaktualizowałem
paramiko
:A teraz to działa.
źródło
Jak wspomniano powyżej, Fabric będzie obsługiwał ustawienia pliku .ssh / config po pewnym czasie, ale użycie pliku pem dla ec2 wydaje się być problematyczne. IOW poprawnie skonfigurowany plik .ssh / config będzie działał z wiersza poleceń poprzez „ssh servername” i nie będzie działał z „fab somethingask”, gdy env.host = [„servername”].
Zostało to przezwyciężone przez określenie env.key_filename = 'keyfile' w moim fabfile.py i powielenie wpisu IdentityFile już w moim .ssh / config.
Może to być Fabric lub Paramiko, czyli w moim przypadku Fabric 1.5.3 i Paramiko 1.9.0.
źródło
Żadna z tych odpowiedzi nie działała dla mnie na py3.7, fabric2.5.0 i paramiko 2.7.1.
Jednak użycie atrybutu PKey w dokumentacji działa: http://docs.fabfile.org/en/2.5/concepts/authentication.html#private-key-objects
źródło