Saya memiliki kasus penggunaan di mana saya kadang-kadang ingin menyalin satu file dari mesin host saya ke tamu Vagrant.
Saya tidak ingin melakukannya melalui pemasok tradisional (Boneka / Koki) karena ini sering kali saja - Saya hanya ingin sesuatu yang cepat ditambahkan ke Vagrantfile saya.
Saya tidak ingin berbagi seluruh direktori, mungkin karena saya ingin menimpa file yang ada tanpa nuking seluruh direktori pada tamu.
Tampaknya juga agak berlebihan untuk menulis skrip provisi shell, dan berurusan dengan kemungkinan melarikan diri, ketika semua yang ingin saya lakukan adalah menyalin file.
Jadi, apa cara termudah untuk menyalin satu file dari host ke tamu?
/vagrant
seperti yang disebutkan di sini juga bisa menjadi pilihan yang baikvagrant upload /path/to/my/file
...vagrant scp file.txt :~/.
Jawaban:
Alih-alih menggunakan penyedia shell untuk menyalin file, Anda juga dapat menggunakan penyedia file Vagrant .
sumber
/tmp
Karena Anda meminta cara termudah, saya sarankan menggunakan vagrant-scp . Itu menambahkan perintah scp ke gelandangan, sehingga Anda dapat menyalin file ke VM Anda seperti yang biasanya Anda lakukan dengan scp.
Instal melalui:
Gunakan seperti ini:
sumber
vagrant plugin
."vagrant scp /vagrant/www/koushik.php ubuntu/trusty64:/usr/share/nginx/html
saya mencoba menyalin file ke direktori root nginx. Dikatakan,The machine with the name 'C' was not found configured for this Vagrant environment.
Direktori dan semuanya baik-baik saja.Sebenarnya ada solusi yang jauh lebih sederhana. Lihat https://gist.github.com/colindean/5213685/#comment-882885 :
sumber
config.vm.synced_folder ".", "/vagrant", disabled: false
dan kemudianvagrant reload
centos/7
kotak gelandangan jika mencoba melakukan operasi terbalik (kotak gelandangan ke mesin lokal).Sebagai default, instance gelandangan pertama menggunakan port ssh sebagai 2222, dan alamat ip-nya adalah 127.0.0.1 (Anda mungkin perlu menyesuaikan port dengan host virtual nyata)
Jadi Anda dapat menjalankan perintah di bawah ini untuk menyalin file lokal Anda ke instance gelandangan. kata sandi sama dengan nama pengguna yaitu
vagrant
.Anda juga dapat menyalin file kembali ke host lokal Anda.
sumber
scp -P 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no my-file.txt [email protected]:/tmp
~/.ssh/config
sebagai default, yang saya lakukan di lingkungan saya:StrictHostKeyChecking no
rsync
untuk bekerja dalam kasus ini dibandingkan denganscp
, mengingat deskripsi rsync sebagai "pengganti yang lebih cepat dan fleksibel untuk rcp."Inilah pendekatan saya terhadap masalah:
Langkah 1 - Temukan kunci pribadi, ssh port dan IP:
Langkah 2 - Transfer file menggunakan port dan kunci pribadi sebagai parameter untuk scp:
Saya harap ini membantu,
sumber
Apa yang akhirnya saya lakukan adalah menyimpan file dalam direktori gelandangan saya (secara otomatis dipasang sebagai / gelrant /) dan menyalinnya dengan penyedia shell:
sumber
install
misalnyainstall -D -m644 -C ...
src dest. alih-alih cp, karena Anda dapat melakukan hal-hal seperti menentukan izin, kepemilikan, secara otomatis membuat direktori terkemuka, hanya melakukan salinan jika file perlu diperbarui, dll ... alih-alih cp, yang sederhana dan baik-baik saja jika hanya itu yang Anda inginkan perlu dilakukan.Vagrantfile
dengan ketentuan Anda yang lain. Anda harus menggantipath_within_repo
danremote_file
dengan hal-hal yang masuk akal, untuk aplikasi Anda, tentu saja :)yang akan menempatkan file lokal di direktori home pengguna gelandangan
https://www.vagrantup.com/docs/cli/upload.html
sumber
Jika Anda tidak memiliki file dalam direktori Anda, Anda dapat menjalankan kode ini dalam file skrip dari mesin Host.
Dalam pengaturan ini, Anda hanya perlu mengubah
/File/To/Copy
ke file atau file yang ingin Anda salin dan kemudian/Where/To/Put/File
adalah lokasi di VM yang ingin Anda salin file.Jika Anda membuat file ini dan menyebutnya,
copyToServer.sh
Anda kemudian dapat menjalankansh
perintah untuk mendorong file-file itu.Sebagai catatan akhir, Anda tidak dapat menjalankan kode ini
provisioner
karena itu berjalan di server Tamu, sementara kode ini dijalankan dari Host.sumber
vagrant ssh-config
dan menempelkannya ke file ~ / .ssh / config mereka, untuk membuat ini lebih mudah di masa depan. Yaitu menggabungkan ini dengan jawaban chfOPTIONS=`vagrant ssh-config | tail -n +2 | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
harus menghilangkan menggunakan baris pertama dari output ssh-config.OPTIONS=`vagrant ssh-config | grep -v '^Host ' | awk -v ORS=' ' 'NF{print "-o " $1 "=" $2}'`
seperti yang didokumentasikan di sini: gist.github.com/geedew/11289350Vagrant menyediakan cara untuk mengeksekusi perintah alih ssh alih-alih masuk, jadi untuk host dan tamu Linux Anda dapat menggunakan:
cat ~/file_on_host.txt | vagrant ssh -c 'cat - > ~/file_on_guest.txt'
vagrant ssh -c 'cat ~/file_on_guest.txt' > ~/file_on_host.txt
Tidak perlu plugin atau isi ulang tamu. Pastikan untuk memberikan ID kotak gelandangan untuk 'gelandangan ssh' jika Anda tidak berada dalam direktori yang sama dengan Vagrantfile. Diuji pada Vagrant v1.8.1.
sumber
Anda dapat menambahkan entri di
~/.ssh/config
:dan yang sederhana
scp file vagrant:/path/
. Anda dapat menemukan path ke file identitas menggunakanvagrant ssh-config
perintah.sumber
vagrant ssh-config
memberi Anda konfigurasi yang lebih lengkap dan nyaman yang dapat Anda masukkan ke ~ / .ssh / config Anda. Tapi terima kasih lagi!Buka direktori tempat Anda memiliki
Vagrantfile
Kemudian, edit
Vagrantfile
dan tambahkan yang berikut ini:"." berarti direktori tempat Anda berada saat ini di mesin host
"/ gelandangan" mengacu pada "/ rumah / gelandangan" pada mesin tamu (mesin Vagrant).
Salin file yang Anda perlu kirim ke mesin tamu ke folder di mana Anda memiliki
Vagrantfile
Kemudian buka Git Bash Anda dancd
ke direktori di mana Anda memilikiVagrantfile
dan ketik:di mana XXXXXXX adalah nama vm Anda . Anda bisa mendapatkan nama vm Anda dengan menjalankan
sumber
jika karena alasan tertentu Anda tidak memiliki izin untuk menggunakan
ada cara alternatif:
Pertama, naikkan proyek Anda , lalu tulis di terminal:
Anda akan memiliki informasi tentang "HostName" dan "Port" dari mesin virtual Anda.
Dalam beberapa kasus, Anda dapat memiliki beberapa mesin virtual di proyek Anda. Jadi temukan saja mesin-master Anda (secara umum, VM ini memiliki port 2222), dan tidak memperhatikan informasi mesin lain.
tulis perintah untuk membuat salinan:
Pada curam ini Anda harus meletakkan kata sandi gelandangan: secara default itu "gelandangan"
setelah itu jika Anda melihat file di mesin virtual Anda:
Anda akan memiliki "file.txt" di direktori mesin virtual Anda
sumber
plugin vagrant scp bekerja jika Anda tahu nama kotak gelandangan Anda. periksa status global gelandangan yang akan memberikan nama kotak Anda maka Anda dapat menjalankan:
sumber
Coba ini .. vagrant ubuntu 14.04 Ini bekerja untuk saya.
sumber
Cara alternatif untuk melakukan ini tanpa menginstal apa pun (
vagrant-scp
dll.) Perhatikan bahwa namadefault
harus digunakan apa adanya, karenavagrant ssh-config
memancarkannya.Fungsi ini tidak perlu jika
scp -F =(vagrant ssh-config) ...
akan bekerja di shell. Tapi karena ini tidak didukung oleh Bash, kita harus menggunakan solusi ini.sumber
Jika seseorang ingin mentransfer file dari host windows ke gelandangan, maka solusi ini berhasil untuk saya.
Anda harus dapat melihat direktori di mesin gelandangan Anda.
sumber
Cara terbaik untuk menyalin file dari lokal ke gelandangan, Tidak perlu menulis kode apa pun atau perubahan konfigurasi apa pun. 1- Pertama naikkan gelandangan ( gelandangan ) 2- buka cygwin 3- cygwin: buka folder Anda di mana vagrantfile atau dari mana Anda meluncurkan gelandangan 4- ssh gelandangan 5- sekarang ini akan berfungsi seperti sistem normal.
sumber