[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-config
를 ssh
사용 하여 전체 를 구성 파일로 전달하십시오 -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