실제로 "vagrant ssh"를 실행하지 않고 ssh를 ssh하는 방법은 무엇입니까?


149

Vagrant가 ssh명령을 사용하여 쉘 스크립트 내에서 VM에 로그하는 방식을 재현하여 Vagrant 인스턴스에 별명을 작성합니다.

일반 ssh명령을 사용하여 액세스 하는 명령 구문은 무엇입니까 ?


당신이 실제로 묻는 것은 무엇입니까, 세 가지 다른 질문이 있습니다. 어쩌면 질문을 확장 한 다음 마이그레이션하도록 플래그를 지정할 수 있습니다. 감사.
Kev

3
기본적으로 -22 인 VM의 ssh 포트는 호스트 시스템에서 2222로 전달됩니다. SSH로 127.0.0.1 및 포트 2222에 putty-ed를 시도했습니다.
Vishal Biyani 2016 년

8
둘 이상의 상자를 실행하는 경우 해당 포트 번호가 자동으로 변경됩니다. 를 실행하여 올바른 것을 얻을 수 있습니다 vagrant ssh-config.
Stefano Palazzo

답변:


108

-c옵션 인 인수가 제대로 전달되지 않았기 때문에 "vagrant ssh"를 다시 구현 해야했습니다. 이것이 기본적으로 하는 일입니다 (더 많을 수도 있지만이 방법으로 잘 작동합니다)

#!/bin/sh
PORT=$(vagrant ssh-config | grep Port | grep -o '[0-9]\+')
ssh -q \
    -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -i ~/.vagrant.d/insecure_private_key \
    vagrant@localhost \
    -p $PORT \
    "$@"

단일 라이너로 (kgadek 덕분에) :

ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost

여러 개의 유랑 호스트가있는 경우를 고려하여 원하는 호스트를 선택하고 구성에서 빈 줄을 sed를 사용하여 선택합니다 (sed 사용).

HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' |  awk 'NR>1 {print " -o "$1"="$2}') localhost

3
이 답변은 디렉토리 ssh외부에서 Vagrantfile( "일반 ssh명령을 사용하여 ") Vagrant에게 당신 을 허락하지 않습니다 . 이것이 제가 질문을 해석 한 방법입니다.
sjy

직접 포트를 설정할 수 있습니다. 따라서 스크립트는 모든 디렉토리에서 실행 가능합니다.
Yser

그렇다면 포트가 기계에 들어가는 방법은 무엇입니까? 포트의 구성은 어디에 있습니까?
17:45에

1
방랑자는 auto_correct: true설정 과 함께 사용하지 않는 것을 선택 합니다. 다음은 수동으로 변경하는 방법에 대한 자세한 정보입니다.
Stefano Palazzo

1
나는 첫 줄을 건너 뛰어야했다. Host항목. 수정 된 명령은 다음과 같습니다.ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
kgadek

148

이미 많은 답변이 있지만 모두 지나치게 복잡해 보였거나 질문자가 가지고 있지 않은 문제를 해결했습니다.

간단히:

# save the config to a file
vagrant ssh-config > vagrant-ssh

# run ssh with the file.
ssh -F vagrant-ssh default

2
놀랍습니다. 에 vagrant-ssh파일을 추가하는 중 .gitignore입니다.
sashaegorov

5
일부 껍질 (예 zshssh -F =(vagrant ssh-config) default
:)을 사용

4
당신은 에코 당신에이 결과 할 수 있습니다 sshconfig 파일 : vagrant ssh-config >> ~/.ssh/config방금 실행하므로 ssh default시스템의 어디서든, 어디 default당신이 좋아 지정할 수있는 VM의 이름입니다 여기에
adamczi

덕분에이 또한 추가 ssh를 매개 변수를 추가 자동화 솔루션을 작동하는 간단한 방법입니다 @adamczi -F간단하지 않습니다
laimison가

3
~/.ssh/config@adamczi가 제안한 방식으로 항목을 추가하면 Visual Studio Code Remote-SSH 확장을 사용하여 Vagrant VM에 ssh하고 파일을 편집하고 원격 개발을 수행 할 수 있습니다. 간단히 CMD-SHIFT-P를 누른 다음 "Remote-SSH : Connect to Host ..."와 방금 추가 한 ssh .config 항목이 자동으로 나열됩니다. 간단히 선택하면 vocode, vscode가 원격 vagrant vm에 연결됩니다! 구성 항목 접근 방식이 없으면 vscode로 어떻게 다른 작업을 수행했는지 잘 모르겠습니다.
abulka

52

터미널 런

vagrant ssh

다른 터미널 창 / 탭 실행

ps aux | grep ssh

여기 Vagrant가 실행 한 실제 명령이 표시됩니다.

ssh vagrant@127.0.0.1 -p 2222 -o Compression=yes -o DSAAuthentication=yes -o LogLevel=FATAL -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i ~/.vagrant.d/less_insecure_private_key -o ForwardAgent=yes

Sequel Pro와 같은 SQL GUI 연결과 같은 다른 이유로 ssh에 대한 유인 호스트가 필요한 경우 좋은 요령입니다. 이건 날 구해줘!
Atomox

19

매개 변수 vagrant ssh-configssh사용 하여 전체 를 구성 파일로 전달하십시오 -F configfile. 연결할 호스트 별명은의 첫 번째 행에 정의되어 있습니다 vagrant ssh-config. Host default에 연결할 수 있음을 의미합니다 ssh default.

표준 입력에서 구성 파일을 읽는 옵션을 볼 수 없으므로 임시 파일 경로를 사용했습니다. 다음은 임시 $TMPDIR.vagrant-ssh-config파일을 정리하는 하나의 라이너입니다 . Vagrantfile방랑 상자가 실행 중이라고 가정 하고와 동일한 디렉토리에서 실행해야합니다 .

vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config

참고 : Mac OSX 시스템에서는 (현재)로 $TMPDIR확장됩니다 /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/. 시스템에 설정되지 않은 경우 다른 변수 또는 다른 폴더를 사용하십시오 .


3
bash 또는 zsh를 사용하는 경우 프로세스 대체 는 한 명령의 출력을 다른 명령으로 전달하는 간단한 방법입니다. bash : ssh -F <(vagrant ssh-config) zsh : zsh 프로세스 대체 ssh -F =(vagrant ssh-config)
myeeshen

@ myshen : @ tyrion 의 대답에 따르면 프로세스 대체는 ssh -Fbash에서 작동하지 않습니다 -언급 한 방식은 zsh에서 작동해야합니다.
Joel Purra

Dang, 나는 배쉬는 말할 것도없고 실제로 vagrant를 사용하는 방법을 배워야한다.
스펜서 윌리엄스

14

나는 이것을 매우 간단한 방법으로 해결했습니다 : 당신이 방랑 상자를 시작할 때 다음과 같은 ssh 주소를 보여줍니다

SSH address: 127.0.0.1:2222

그런 다음 방랑자, 호스트 및 포트를 사용하여 상자에 연결할 수 있습니다

ssh vagrant@127.0.0.1 -p 2222

1
좋은! 일반적으로 방랑자 사용자의 암호는 다음과 같습니다.vagrant
Brad Parks

7

당신이 사용하는 표준 입력 할 필요가없는 경우ssh사용할 수있다 (예를 들어, 당신은 단지 명령 및 로그 아웃을 실행하려는) :

vagrant ssh-config --host default | ssh -F /dev/stdin default

이 방법은 Google 그룹 과 유사한 질문에 대한 응답으로 제안되었습니다 .

불행히도 bash 프로세스 대체 는 작동하지 않습니다 ( 자세한 내용 은 unix.stackexchange 에서이 질문 을 참조하십시오).

대화식 쉘을 원한다면 가장 좋은 옵션은 임시 파일을 만들고 다른 답변에서 제안한대로 ssh -F사용하거나 사용 awk하는 것입니다.


5

scp와 같은 일반적인 일반 ssh 명령 줄을 사용할 수 있도록 설정하려는 경우 vagrant ssh-config기본 ssh 구성에 출력을 실행 하고 추가 할 수 있습니다. "Host default"행을보다 설명적인 호스트 이름으로 바꾸면 계속 진행해야합니다.

vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box

의사가 정확히 주문한 내용 ... Thx.
xenoid

4

당신이 당신 박스에 연결하기 위해 최소한의 명령을하려는 경우, 당신은 (할 때 인쇄가 사용하고있는 포트를 알아야 vagrant up하고, 또는 볼을 vagrant ssh-config) 어디 개인 SSH 키이다 (도 볼 수 할 때 vagrant ssh-config)

그런 다음 키와 포트를 제공하는 것입니다.

ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1


4

다른 답변은 Vagrant가 설치되었다고 가정합니다.

Windows 10에 Vagrant가 설치되어 있지만 vagrant sshPuTTy를 SSH 클라이언트로 사용하고 있기 때문에 수 없습니다 .

ssh는 PATH에 실행 파일이 발견되었습니다 퍼티 링크 SSH 클라이언트입니다. Vagrant는 OpenSSH SSH 클라이언트와 만 호환됩니다.

그러나 Windows 10에서는 Windows의 Ubuntu에 Bash가 있습니다. 그래서 나는 그것을 다음 명령과 함께 사용합니다 :

ssh vagrant@127.0.0.1 -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal

Win10-Ubuntu에 Vagrant를 설치하는 것은 쉽지만 어떤 이유로 든 Virtualbox를 설치하기를 원합니다.

NB 나는 ssh default -F vagrant-ssh-config방법으로 시도했지만 , 나는 단지 얻는다.

권한이 거부되었습니다 (공개 키, 암호).

IdentityFile경로가 Windows 경로 이기 때문에 Bash에서는로 시작해야하기 때문에 이것이 추측 됩니다 /mnt/c/. 파일을 작성한 다음 더 잘 작동하면 수정할 수 있다고 가정합니다.


4

로컬 ssh 구성에 방랑자 호스트 구성을 추가 할 수 있습니다.

  1. 방랑자 ssh-config >> ~ / .ssh / config

  2. ssh vagrant @ {host}

전의. 고양이 ~ / .ssh / config

Host kmaster
  HostName 127.0.0.1
  User vagrant
  Port 2222..
  ....
  • ssh vagrant @ kmaster

3

원격 사용자가 시스템에 로그인하는 방법을 복제하는 방법이 있습니다

  1. 인스턴스의 Vagrantfile을 추가하여 편집하십시오.

config.vm.network "private_network", ip: "192.168.33.10"

이렇게하면 호스트에 개인 IP가 추가됩니다 (아직 사용하지 않는 한 192.168 범위에서 원하는 것을 확인하십시오)

  1. 명령 줄에서 vagrant reload로 인스턴스를 다시 시작하십시오.
  2. vagrant private_key 파일을 상자에서 실행해야 할 Linux 파일 (예 : Windows의 경우 Cygwin, Windows 10을 사용하는 경우)에 cygwin 홈 디렉토리에 복사하여 키를 사용할 호스트를 설명하는 이름으로 바꿉니다. 예를 들어

your_virtual_host_name.pem

  1. .vagrant \ machines \ default \ virtualbox \ private_key 아래에 키가 있습니다.

  2. 홈 디렉토리로 이동하여 일반적인 Unix ssh를 수행하십시오.

ssh -i your_virtual_hostname.pem username@192.168.33.10

표준 상자가있는 경우 사용자 이름이 유용 할 수 있습니다. 상자에 대한 ssh 표준 세부 사항은 vagrant ssh-config 출력을보십시오.

그게 다야


다른 곳에서 방랑자의 키 파일을 복사하려는 아이디어 덕분 에 Linux 에서 libvirt 공급자를 사용했습니다 . libvirt 공급자를 사용하면 sudo를 사용하여 vagrant 를 초기화해야 하며 .vagrant폴더 내의 모든 파일 은 root가 소유 하기 때문에 중요 합니다. 파일에 대한 권한은 rw -------이므로 루트 만 키 파일을 읽을 수있는 권한이있었습니다. 아마도 이것은 누구에게나 도움이 될 것입니다.
TomasH

2

Vagrant 는 개인 키를 저장 하고을~/.vagrant.d/insecure_private_key 통해 모든 컴퓨터 ssh에 연결하는 데 사용합니다. 포트 2200 (기본값)에 연결되도록 구성된 것을 고려하면 다음과 같습니다.

ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key

참고 :를 실행하는 사용자가 개인 키를 소유하고 있는지 확인하십시오Vagrant .

다중 머신 환경 을 지향하는 것이 목표라면을 사용하여 수행 할 수 있습니다 config.vm.define.

다음은이 기계라는 하나의 환경 보여주는 예입니다 web, 다른됩니다 databases:

config.vm.define 'web', primary: true do |web|
        web.vm.box = 'CentOS64'
        web.vm.hostname = 'vic-develop'
        web.vm.network 'private_network', ip: '192.168.50.10', virtualbox__intnet: true
        web.vm.synced_folder '../code', '/var/www/project', :mount_options => ["dmode=777,fmode=777"]

        web.vm.provision 'ansible' do |ansible|
            ansible.playbook = 'development-web.yml'
            ansible.sudo = true
        end
end

config.vm.define 'databases' do |db|
    db.vm.box = 'CentOS64'

    db.vm.network 'private_network', ip: '192.168.50.20', virtualbox__intnet: true
    db.vm.network :forwarded_port, guest: 3306, host: 8206

    db.vm.provision 'ansible' do |ansible|
        ansible.playbook = 'development-db.yml'
        ansible.sudo = true
    end
end

그러면 머신마다 모든 Vagrant 명령을 사용할 수 있습니다 (예 : vagrant ssh web및) vagrant provision databases.


이전 시스템을 "기본"으로 설정 한 경우 하나의 시스템 구성을 2 시스템 구성으로 변경할 수 있습니까?
17:52에

2

ssh vagrant@<host> 암호: vagrant

예 :

  • ssh vagrant@vagrant.local

  • 또는 IP를 확인한 후 (내부에서을 사용하여 vagrant ssh)ssh vagrant@172.28.128.3


2

vagrant 호스트에 대한 ssh config를 ssh config에 추가 할 수 있습니다.

  1. vagrant 폴더에서 vagrant machine에 대한 ssh 구성을 가져옵니다. vagrant ssh-config

  2. {UserDir}/.ssh/config이전 명령의 결과를 열고 추가하십시오. 참고 : 첫 번째 줄 Host default은 나중에 ssh명령에 사용할 별칭을 의미합니다 . 당신의 이름을 당신의 vagrant machine 또는 dir로 지정하십시오. 방랑자 디렉토리가 하나 뿐인 경우 이름을 지정할 수 있습니다.Host vagrant

  3. ssh to vagrant : ssh vagrant. 성은 이전 단계의 별명입니다.


1

ssh-config인수를 가져 와서 명령 행에서 ssh로 전달할 수 있습니다 -o Key=value. 그래서, 간단한 하나의 호스트 방랑 설정에 (당신과 함께 조금 더 작업을 수행해야 할 수도 있습니다 grep또는 perl, 당신은 다음과 같은 일을 할 수있는 멀티 호스트 설정에 대한) (또는 교체 perl와 함께 sed당신이 원하는 경우)

ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost

0

내 환경 Win7 + Centos입니다. 대부분의 동의에 대한 답변은 저에게 효과적이지 않습니다. 시도 후 실패한 후 ssh -p [port] [usrname]@127.0.01XShell을 사용하여 방랑 포트와 사용자 이름으로 새 세션을 추가합니다.

효과가있다.

어쩌면 Xshell은 적합합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.