[shell] 실제로 “vagrant ssh”를 실행하지 않고 ssh를 ssh하는 방법은 무엇입니까?

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

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



답변

-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


답변

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

간단히:

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

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


답변

터미널 런

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


답변

매개 변수 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/. 시스템에 설정되지 않은 경우 다른 변수 또는 다른 폴더를 사용하십시오 .


답변

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

SSH address: 127.0.0.1:2222

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

ssh vagrant@127.0.0.1 -p 2222


답변

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

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

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

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

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


답변

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