IT story

호스트에서 Vagrant guest로 단일 파일을 복사하는 가장 쉬운 방법은 무엇입니까?

hot-time 2020. 4. 19. 13:55
반응형

호스트에서 Vagrant guest로 단일 파일을 복사하는 가장 쉬운 방법은 무엇입니까?


호스트 시스템에서 Vagrant 게스트로 단일 파일을 복사하려는 경우가 있습니다.

전통적인 프로 비져 (Puppet / Chef)를 통해 그렇게하고 싶지 않습니다. 이것은 종종 일회성이므로, Vagrantfile에 빠른 것을 추가하고 싶습니다.

게스트의 전체 디렉토리를 압축하지 않고 기존 파일을 덮어 쓰려고하므로 전체 디렉토리를 공유하고 싶지 않습니다.

또한 셸 프로비저닝 스크립트를 작성하고 잠재적 탈출을 처리하는 것은 약간의 과도한 노력 인 것처럼 보입니다. 파일을 복사하는 것이 전부입니다.

그렇다면 단일 파일을 호스트에서 게스트로 복사하는 가장 쉬운 방법은 무엇입니까?


쉘 프로 비저 너를 사용하여 파일을 복사하는 대신 Vagrant file provisioner를 사용할 수도 있습니다 .

제공자 이름 : "file"

파일 제공자를 사용하면 호스트 시스템에서 게스트 시스템으로 파일을 업로드 할 수 있습니다.

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end

가장 쉬운 방법을 요청하므로 vagrant-scp를 사용 하는 것이 좋습니다 . scp 명령을 vagrant에 추가하므로 일반적으로 scp와 마찬가지로 VM에 파일을 복사 할 수 있습니다.

다음을 통해 설치하십시오.

vagrant plugin install vagrant-scp

다음과 같이 사용하십시오.

vagrant scp <some_local_file_or_dir> [vm_name]:<somewhere_on_the_vm>

실제로 훨씬 간단한 해결책이 있습니다. https://gist.github.com/colindean/5213685/#comment-882885를 참조 하십시오 .

"특정 이유로 scp를 원하지 않는 한, 호스트에서 VM으로 파일을 전송하는 가장 쉬운 방법은 Vagrantfile과 동일한 디렉토리에 파일을 저장하는 것입니다. 해당 디렉토리는 VM의 / vagrant에 자동으로 마운트되므로 VM에서 직접 복사하거나 사용할 수 있습니다. "


기본적으로 첫 번째 인스턴스 인스턴스는 ssh 포트를 2222로 사용하고 IP 주소는 127.0.0.1입니다 (실제 가상 호스트로 포트를 조정해야 할 수도 있음)

==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)

따라서 아래 명령을 실행하여 로컬 파일을 방랑 인스턴스로 복사 할 수 있습니다. 비밀번호는 사용자 이름과 동일 vagrant합니다.

scp -P 2222 your_file vagrant@127.0.0.1:.

파일을 로컬 호스트로 다시 복사 할 수도 있습니다.

scp -P 2222 vagrant@127.0.0.1:/PATH/filename .

문제에 대한 나의 접근 방식은 다음과 같습니다.

1 단계-개인 키, ssh 포트 및 IP를 찾습니다.

root@vivi:/opt/boxes/jessie# vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /root/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

2 단계-포트 및 개인 키를 scp의 매개 변수로 사용하여 파일 전송 :

  scp -P 2222 -i /root/.vagrant.d/insecure_private_key \
  someFileName.txt vagrant@127.0.0.1:~

도움이 되길 바랍니다.


내가 한 일은 내 파일을 내 디렉토리 디렉토리 (자동으로 / vagrant /로 마운트) 내에 유지하고 쉘 프로 비져로 복사하는 것이 었습니다.

command = "cp #{File.join('/vagrant/', path_within_repo)} #{remote_file}"
config.vm.provision :shell, :inline => command

디렉토리에 파일이없는 경우 호스트 시스템의 스크립트 파일에서이 코드를 실행할 수 있습니다.

#!/bin/sh
OPTIONS=`vagrant ssh-config | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`

scp ${OPTIONS} /File/To/Copy vagrant@YourServer:/Where/To/Put/File

이 설정에서는 /File/To/Copy복사하려는 파일 로만 변경 하면되며 파일을 복사 /Where/To/Put/File할 VM의 위치입니다.

이 파일을 작성하고 호출 copyToServer.sh하면 sh명령을 실행하여 해당 파일을 푸시 할 수 있습니다.

sh ./copyToServer.sh

마지막으로이 코드 provisioner는 게스트 서버에서 실행되고이 코드는 호스트에서 실행되므로이 코드를 실행할 수 없습니다 .


vagrant upload localfile

방대한 사용자의 홈 디렉토리에 localfile을 넣을 것입니다.

https://www.vagrantup.com/docs/cli/upload.html


Vagrant는 로그인하는 대신 ssh를 통해 명령을 실행하는 방법을 제공하므로 Linux 호스트 및 게스트의 경우 다음을 사용할 수 있습니다.

  • 호스트에서 게스트로 :

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

플러그인이나 게스트를 다시로드 할 필요가 없습니다. Vagrantfile과 동일한 디렉토리에 있지 않은 경우 'vagrant ssh'에 vagrant box ID를 제공하십시오. Vagrant v1.8.1에서 테스트되었습니다.


에 항목을 추가 할 수 있습니다 ~/.ssh/config:

Host vagrant
    User vagrant
    HostName localhost
    Port 2222
    IdentityFile /home/user_name/.vagrant.d/insecure_private_key

그리고 간단한 scp file vagrant:/path/. vagrant ssh-config명령을 사용하여 ID 파일의 경로를 찾을 수 있습니다 .


어떤 이유로 귀하에게 사용 권한이없는 경우

vagrant plugin install vagrant-scp

다른 방법이 있습니다.

먼저 yourVagrantProject를 방랑 한 다음 터미널에 작성하십시오.

vagrant ssh-config

가상 머신의 "HostName"및 "Port"에 대한 정보가 있습니다.

어떤 경우에는 프로젝트에 가상 머신이있을 수 있습니다. 따라서 마스터 머신 (일반적 으로이 VM에는 포트 2222가 있음)을 찾으십시오. 다른 머신 정보에는주의를 기울이지 마십시오.

복사 명령을 작성하십시오.

scp -P xxPortxx  /Users/where/is/your/file.txt  vagrant@xxHostNamexx:/home/vagrant

이 가파른 곳에서는 방랑자 암호를 입력해야합니다. 기본적으로 "방랑자"입니다.

그 후에 가상 머신의 파일을 보면 :

vagrant ssh xxVirtualMachineNamexx
pwd
ls

가상 머신 디렉토리에 "file.txt"가 있습니다.


가지고있는 디렉토리로 이동하여 Vagrantfile
편집 한 후 Vagrantfile다음을 추가하십시오.

config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=774','fmode=775']

"." " 현재 호스트 컴퓨터 에있는 디렉토리
"/ vagrant "게스트 컴퓨터 (Vagrant machine)의 "/ home / vagrant "를 나타냅니다 .

당신이 당신이 폴더에 게스트 컴퓨터에 전송하는 데 필요한 파일을 복사 Vagrantfile한 다음 열기 힘내 배쉬cd당신의 가지고있는 디렉토리 Vagrantfile와 종류를 :

vagrant scp config.json XXXXXXX:/home/vagrant/

여기서 XXXXXXX는 vm 이름 입니다. 다음을 실행하여 VM 이름을 얻을 수 있습니다

vagrant global-status

당신이 당신의 vagrant box name을 알고 있다면 vagrant scp plugin이 작동합니다. 상자 이름을 제공하는 방랑 전 세계 상태를 확인하면 다음을 실행할 수 있습니다.

vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
13e680d  **default** virtualbox running /home/user

vagrant scp ~ / foobar "내 이름은 default": / home / "user"/


아무것도 설치하지 않고이 작업을 수행하는 다른 방법 vagrant-scp은 이름 default을 그대로 사용하므로 이름 을 그대로 사용해야 vagrant ssh-config합니다.

vg_scp() {
  tmpfile=$(mktemp /tmp/vagrant-ssh-config.XXXX)
  vagrant ssh-config > $tmpfile
  scp -F $tmpfile "$@"
  rm $tmpfile
}

# Copy from local to remote
vg_scp somefile default:/tmp

# Copy from remote to local
vg_scp default:/tmp/somefile ./

# Copy a directory from remote to local
vg_scp -r default:/tmp ./tmp

scp -F =(vagrant ssh-config) ...쉘에서 작동 했을 경우이 기능은 필요하지 않습니다 . 그러나 이것은 Bash에서 지원하지 않기 때문에이 해결 방법을 사용해야합니다.


누군가 Windows 호스트에서 방랑자로 파일을 옮기고 싶다면이 솔루션이 효과적이었습니다.

1. Make sure to install **winscp** on your windows system
2. run **vagrant up** command
3. run **vagrant ssh-config** command and note down below details
4. Enter Hostname, Port, Username: vagrant, Password: vagrant in winscp and select **SCP**, file protocol 
5. In most cases, hostname: 127.0.0.1, port: 2222, username: vagrant, password: vagrant.

유랑 시스템에서 디렉토리를 볼 수 있어야합니다.


이것을보십시오 .. 방랑 우분투 14.04 이것은 나를 위해 일했다.

scp -r -P 2222 vagrant@localhost:/home .

로컬에서 파일을 파일을 복사하는 가장 좋은 방법, 코드를 작성하거나 구성을 변경할 필요가 없습니다. 1- 먼저 방랑자 ( vagrant up ) 2- open cygwin 3- cygwin : 방랑자 파일이있는 폴더로 이동하거나 방랑자 4 ssh vagrant 5를 시작하는 곳으로 이동하십시오. 이제 일반 시스템처럼 작동합니다.

참고 URL : https://stackoverflow.com/questions/16704059/easiest-way-to-copy-a-single-file-from-host-to-vagrant-guest

반응형