다음 명령을 사용하여 기본 Ubuntu VM 상자를 구성하고 시작했습니다.
vagrant init ubuntu/trusty64; vagrant up --provider virtualbox
이제 교육 목적으로 다음 구문을 사용하여 SSH로 연결하고 싶습니다.
ssh -F /dev/stdin < <(vagrant ssh-config) default
이 명령은 가상 머신에 성공적으로 연결되지만 인쇄 후 즉시 연결이 끊어집니다.모드.
왜 이런 일이 발생하는지, 그리고 이를 피할 수 있는 방법이 있는지 알고 싶습니다.
의사 터미널 할당을 강제로 시도했지만 성공하지 못했습니다.
다음 두 명령 구문이 예상대로 작동한다는 것을 알고 있습니다.
vagrant ssh-config > ssh_tmp
ssh -F ssh_tmp default
그렇다면 프로세스 대체 구문을 사용할 때 왜 실패하는지 궁금합니다.
답변1
vagrant ssh-config
명령의 표준 입력으로 전달하는 출력입니다 ssh
. 원격 명령을 실행하고 원격 표준 입력을 로컬 표준 입력에 연결할 때 ssh
파일 끝에 도달했습니다. 따라서 원격 쉘은 표준 입력에서 파일 끝을 확인하고 즉시 종료됩니다.
일반적으로 다른 파일 설명자에 구성 파일을 전달해야 합니다.
ssh -F <(vagrant ssh-config) default
ssh
그러나 기본이 아닌 파일 설명자가 구성 파일을 읽기 전에 닫히기 때문에 이 방법도 작동하지 않습니다 . 따라서 실제 파일 이름을 프로세스에 전달해야 합니다 ssh
. 다음 출력을 저장하지 않으려면 명명된 파이프일 수 있습니다 vagrant ssh-config
.
mkfifo fifo
vagrant ssh-config >fifo &
ssh -F fifo …
rm fifo
zsh
셸(macOS에서 기본적으로 사용 가능)을 사용하면 =(...)
다음을 통해 액세스되는 파이프 대신 임시 파일을 사용하는 명령 대체 형식을 사용할 수 있습니다 /dev/fd/x
.
ssh -F =(vagrant ssh-config) …
/dev/fd/x
1 명명된 파이프를 사용하여 프로세스 교체가 구현되는 지원되지 않는 시스템은 제외