Bagaimana Anda mengonfigurasi fabric untuk terhubung ke host jarak jauh menggunakan file kunci SSH (misalnya, instans Amazon EC2)?
100
Juga perlu disebutkan di sini bahwa Anda dapat menggunakan argumen baris perintah untuk ini:
fab command -i /path/to/key.pem [-H [user@]host[:port]]
Menemukan fabfile sederhana dengan contoh kerja penggunaan keyfile SSH tidaklah mudah karena beberapa alasan. Saya menulis posting blog tentang itu ( dengan intisari yang cocok ).
Pada dasarnya, penggunaannya berjalan seperti ini:
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')
Bagian yang penting adalah mengatur env.key_filename
variabel lingkungan, sehingga konfigurasi Paramiko dapat mencarinya saat menghubungkan.
env.key_filename
dapat berisi daftar string untuk mencoba beberapa file kunci untuk koneksi.settings
manajer konteks dan tidak bisa mendapatkannya untuk mengenali key_filename sampai aku berubahkey_filename='/path/to/key'
untukkey_filename=['/path/to/key']
jadi jika ada orang lain yang mengalami kesulitan, membuat key_filename daftar kunci mungkin memperbaikinya. Ini dengan fab 1.10.1 dan Paramiko 1.15.2Fitur keren lainnya tersedia pada Fabric 1.4 - Fabric sekarang mendukung konfigurasi SSH .
Jika Anda sudah memiliki semua parameter koneksi SSH di
~/.ssh/config
file Anda , Fabric akan mendukungnya secara native, yang perlu Anda lakukan hanyalah menambahkan:di awal fabfile Anda.
sumber
IOError: [Errno 2] No such file or directory: ' /path/to/.ssh/key'
atauLogin password for ' root':
pastikan Anda tidak memiliki spasi di file.ssh/config
. Ini sebagai contohUser=root
alih-alihUser = root
...Untuk fabric2 di fabfile gunakan yang berikut ini:
dan jalankan dengan:
PEMBARUAN:
Untuk beberapa host (satu host juga akan melakukannya) Anda dapat menggunakan ini:
dan jalankan dengan fab atau fab2:
sumber
staging
tugas ini ?Bagi saya, hal berikut tidak berhasil:
atau
Namun, hal berikut berhasil:
atau
sumber
env.user="ubuntu"
bukanenv.user=["ubuntu"]
.Saya harus melakukan ini hari ini, file .py saya sesederhana mungkin, seperti yang diposting dalam jawaban @YuvalAdam tetapi saya tetap diminta memasukkan kata sandi ...
Melihat
paramiko
log (perpustakaan yang digunakan oleh fabric untuk ssh), saya menemukan baris:Saya memperbarui
paramiko
dengan:Dan sekarang berhasil.
sumber
Seperti yang dinyatakan di atas, Fabric akan mendukung pengaturan file .ssh / config setelah mode, tetapi menggunakan file pem untuk ec2 tampaknya menjadi masalah. IOW file .ssh / config yang diset dengan benar akan bekerja dari baris perintah melalui 'ssh servername' dan gagal untuk bekerja dengan 'fab sometask' ketika env.host = ['servername'].
Ini diatasi dengan menentukan env.key_filename = 'keyfile' di fabfile.py saya dan menduplikasi entri IdentityFile yang sudah ada di .ssh / config saya.
Ini bisa berupa Fabric atau paramiko, yang dalam kasus saya adalah Fabric 1.5.3 dan Paramiko 1.9.0.
sumber
Tak satu pun dari jawaban ini berhasil untuk saya di py3.7, fabric2.5.0 dan paramiko 2.7.1.
Namun, menggunakan atribut PKey dalam dokumentasi tidak berfungsi: http://docs.fabfile.org/en/2.5/concepts/authentication.html#private-key-objects
sumber