호스트에서 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를 시작하는 곳으로 이동하십시오. 이제 일반 시스템처럼 작동합니다.
'IT story' 카테고리의 다른 글
실제 메모리 사용량별로 정렬 된 최상위 프로세스를 보는 방법은 무엇입니까? (0) | 2020.04.19 |
---|---|
Eclipse가 시작시 중단되는 것을 어떻게 방지합니까? (0) | 2020.04.19 |
Numpy 배열을 이미지로 저장 (0) | 2020.04.19 |
Swift에서 UI_USER_INTERFACE_IDIOM ()으로 현재 장치 감지 (0) | 2020.04.19 |
iOS 시뮬레이터에서 콘솔 로그를 얻으려면 어떻게해야합니까? (0) | 2020.04.19 |