Saya ingin mereproduksi cara bagaimana Vagrant log ke VM saya dalam skrip shell menggunakan ssh
perintah, jadi saya membuat alias ke instance Vagrant saya.
Apa sintaks perintah untuk menggunakan ssh
perintah biasa untuk mengaksesnya?
shell
command-line
ssh
vagrant
Kevin Burke
sumber
sumber
vagrant ssh-config
.Jawaban:
Saya harus menerapkan kembali "vagrant ssh" karena
-c
opsi itu tidak meneruskan argumen dengan benar. Ini pada dasarnya apa yang dilakukannya (mungkin ada lebih banyak, tetapi berfungsi dengan baik dengan cara ini)Sebagai satu-liner (dengan terima kasih kepada kgadek):
Untuk memperhitungkan ketika Anda memiliki lebih dari satu host gelandangan, ini akan memilih host yang diinginkan, serta menyisihkan baris kosong dari konfigurasi (menggunakan sed):
sumber
ssh
untuk Vagrant Anda dari luarVagrantfile
direktori ("menggunakanssh
perintah biasa "), yang merupakan cara saya menafsirkan pertanyaan itu.auto_correct: true
pengaturan. Berikut ini info lebih lanjut tentang cara mengubahnya secara manualHost
masuk. Perintah yang dimodifikasi adalah:ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
Sudah ada banyak jawaban, tetapi semuanya tampaknya terlalu rumit atau menyelesaikan masalah yang tidak dimiliki penanya.
secara sederhana:
sumber
vagrant-ssh
file.gitignore
.zsh
), One-liner berikut berfungsi:ssh -F =(vagrant ssh-config) default
ssh
file konfigurasi Anda :,vagrant ssh-config >> ~/.ssh/config
jadi Anda jalankanssh default
dari mana saja di sistem Anda, di manadefault
nama VM yang dapat Anda tentukan seperti di sini-F
tidak mudah~/.ssh/config
dalam cara @adamczi menyarankan Anda kemudian dapat menggunakan ekstensi Visual Studio Code Remote - SSH untuk ssh ke Vagrant VM dan mengedit file dan melakukan pengembangan jarak jauh. Cukup CMD-SHIFT-P lalu "Remote-SSH: Sambungkan ke Host ..." dan entri ssh .config yang baru saja Anda tambahkan secara otomatis terdaftar - Anda cukup pilih dan voila, vscode terhubung ke vm gelandangan jarak jauh Anda! Tanpa pendekatan entri konfigurasi, saya tidak yakin bagaimana lagi saya akan melakukannya dengan vscode.Dalam menjalankan terminal
Di terminal lain jendela / tab dijalankan
Di sana Anda akan melihat perintah aktual dieksekusi oleh Vagrant, sesuatu seperti ini:
sumber
Cukup kirimkan keseluruhan
vagrant ssh-config
sebagai file konfigurasissh
dengan-F configfile
parameter. Host alias untuk menyambungkan didefinisikan pada baris pertama divagrant ssh-config
;Host default
berarti Anda dapat terhubung denganssh default
.Saya tidak bisa melihat opsi untuk membaca file konfigurasi dari input standar, jadi lanjutkan dengan rute file temp. Berikut ini adalah satu-liner yang juga membersihkan
$TMPDIR.vagrant-ssh-config
file sementara sesudahnya. Itu perlu dijalankan di direktori yang sama dengan AndaVagrantfile
, dengan asumsi Anda kotak gelrant sudah berjalan dan berjalan.Catatan: pada sistem Mac OSX saya,
$TMPDIR
perluas/var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/
(sekarang). Gunakan variabel lain , atau folder lain, jika tidak disetel pada sistem Anda.sumber
ssh -F <(vagrant ssh-config)
zsh: substitusi proses zshssh -F =(vagrant ssh-config)
ssh -F
di bash - cara Anda menyebutkan harus bekerja di zsh sekalipun.Saya memecahkan ini dengan cara yang sangat sederhana: ketika Anda memulai kotak gelandangan itu menunjukkan alamat ssh seperti ini
maka Anda dapat terhubung ke kotak dengan menggunakan pengguna gelandangan, tuan rumah dan port yang Anda dapatkan
sumber
vagrant
Jika Anda tidak perlu menggunakan stdin dengan
ssh
(misalnya Anda ingin menjalankan hanya perintah dan keluar) Anda bisa menggunakan:Metode ini disarankan sebagai jawaban atas pertanyaan serupa di grup google .
Sayangnya substitusi proses bash juga tidak berfungsi (lihat pertanyaan ini di unix.stackexchange untuk detail lebih lanjut).
Opsi terbaik yang Anda miliki, jika Anda ingin shell interaktif, adalah membuat file temp dan menggunakannya dengan
ssh -F
atau menggunakanawk
seperti yang disarankan oleh jawaban lain.sumber
Jika Anda hanya ingin mengaturnya sehingga Anda dapat menggunakan normal ssh commandline normal, serta scp dan semacamnya, Anda dapat menjalankan
vagrant ssh-config
dan menambahkan output ke konfigurasi ssh default Anda. Jika Anda mengganti baris "Host default" dengan nama host yang lebih deskriptif, Anda sebaiknya melanjutkan.sumber
Jika Anda hanya ingin perintah minimum telanjang untuk terhubung ke kotak Anda, Anda perlu tahu port yang digunakannya (dicetak saat melakukan
vagrant up
, atau terlihat melakukanvagrant ssh-config
) dan di mana kunci SSH pribadi Anda (juga terlihat saat melakukanvagrant ssh-config
)Maka itu hanya masalah menyediakan kunci dan port:
ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]
sumber
Banyak jawaban lain menganggap Anda telah menginstal Vagrant.
Saya telah menginstal Vagrant pada Windows 10, tetapi saya tidak bisa
vagrant ssh
karena saya menggunakan Putty sebagai klien SSH saya, yang tidak akan diterima oleh gelandangan.Namun, di Windows 10 kami juga memiliki Bash di Ubuntu di Windows. Jadi, saya hanya menggunakannya dengan perintah berikut:
Cukup mudah untuk menginstal Vagrant di Win10-Ubuntu tetapi juga ingin Anda menginstal Virtualbox karena beberapa alasan, yang saya lebih suka tidak lakukan.
NB Saya sudah mencoba dengan
ssh default -F vagrant-ssh-config
metode ini, tetapi saya baru saja mendapatkannyaSaya menduga ini karena
IdentityFile
path adalah path Windows, sedangkan di Bash, harus dimulai dengan/mnt/c/
. Saya kira Anda hanya bisa menulis file dan memodifikasinya jika itu bekerja lebih baik untuk Anda.sumber
Anda dapat menambahkan konfigurasi host gelandangan ke konfigurasi ssh lokal Anda.
gelandangan ssh-config >> ~ / .ssh / config
ssh vagrant @ {host}
ex. cat ~ / .ssh / config
sumber
Ada cara yang mereplikasi bagaimana pengguna jarak jauh mungkin masuk ke sistem
config.vm.network "private_network", ip: "192.168.33.10"
Ini menambahkan IP pribadi untuk host (jadikan itu yang Anda inginkan dalam kisaran 192.168 selama belum digunakan
your_virtual_host_name.pem
Anda akan menemukan kunci di bawah .vagrant \ machines \ default \ virtualbox \ private_key
Buka direktori home Anda dan lakukan Unix ssh biasa, jadi
ssh -i your_virtual_hostname.pem [email protected]
di mana nama pengguna, mungkin menjadi gelandangan jika Anda memiliki kotak standar, lihat output dari gelran ssh-config untuk detail standar ssh untuk kotak tersebut.
Itu dia
sumber
.vagrant
folder dimiliki oleh root. Dan izin pada file adalah rw ------- jadi hanya root yang memiliki izin untuk membaca file kunci. Mungkin ini bisa membantu siapa saja.Vagrant menyimpan kunci pribadi
~/.vagrant.d/insecure_private_key
dan menggunakannya untuk terhubung ke setiap mesin melaluissh
, mengingat bahwa itu dikonfigurasi untuk terhubung pada port 2200 (default) itu akan menjadi seperti:ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key
Catatan: pastikan bahwa kunci pribadi dimiliki oleh pengguna yang menjalankan
Vagrant
.Meskipun jika tujuan Anda adalah memiliki lingkungan multi-mesin, Anda dapat menggunakannya
config.vm.define
.Berikut ini contoh yang menggambarkan lingkungan dengan 2 mesin, satu disebut
web
dan yang lainnya adalahdatabases
:Maka Anda akan memiliki semua perintah Vagrant yang tersedia per mesin, yaitu
vagrant ssh web
danvagrant provision databases
.sumber
ssh vagrant@<host>
kata sandi:vagrant
Contoh:
ssh [email protected]
atau setelah memeriksa IP (dari dalam, menggunakan
vagrant ssh
)ssh [email protected]
sumber
Anda dapat menambahkan ssh config untuk host gelandangan Anda ke ssh config.
Dapatkan ssh config untuk mesin gelandangan di folder gelandangan:
vagrant ssh-config
Buka
{UserDir}/.ssh/config
dan tambahkan di sana hasil dari perintah sebelumnya. Catatan : baris pertamaHost default
berarti alias yang akan Anda gunakan nanti untukssh
perintah. Beri nama itu sebagai mesin atau gelandangan Anda. Jika Anda hanya memiliki satu dir gelandangan - Anda dapat menyebutkannyaHost vagrant
Ssh untuk gelandangan:
ssh vagrant
. Nama belakang adalah alias dari langkah sebelumnya.sumber
Anda dapat mengambil
ssh-config
argumen apa pun , dan meneruskannya ke ssh pada baris perintah sebagai-o Key=value
. Jadi, untuk pengaturan gelran satu-host sederhana (Anda mungkin harus melakukan lebih banyak pekerjaan dengangrep
atauperl
untuk pengaturan multihost), Anda dapat melakukan sesuatu seperti berikut (atau gantiperl
dengansed
jika Anda mau):sumber
Env saya. adalah Win7 + Centos. Jawaban dengan persetujuan paling tidak berhasil untuk saya. Setelah gagal setelah mencoba
ssh -p [port] [usrname]@127.0.01
, saya hanya menggunakan XShell untuk menambahkan sesi baru dengan port gelandangan dan nama pengguna.Berhasil.
Mungkin Xshell adalah calon.
sumber