길 잃은 가상 머신이 있습니다. 이를 기록하기 위해 vagrant ssh
명령을 실행합니다 . 일반 명령을 사용하여 로그인하고 싶습니다 ssh
. vagrant ssh-config
적절한 구성 파일을 출력합니다 .
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2201
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/cbliard/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
이 구성을 파일로 출력하고 with ssh -F
:를 사용하면 모든 것이 잘 작동합니다.
$ vagrant ssh-config > /tmp/config
$ ssh -F /tmp/config default
=> logged successfully
<(cmd)
임시 구성 파일이 생성되는 것을 방지하기 위해 프로세스 교체 연산자를 사용하면 실패합니다.
$ ssh -F <(vagrant ssh-config) default
Can't open user config file /proc/self/fd/11: No such file or directory
사용시 동일한 오류가 발생했습니다.<(cat /tmp/config)
$ ssh -F <(cat /tmp/config) default
Can't open user config file /proc/self/fd/11: No such file or directory
저는 zsh를 사용하고 있으며 bash에서도 동일한 동작을 관찰하고 있습니다. 내가 여기서 뭘 잘못하고 있는 걸까?
답변1
주문하다:
ssh -F <(vagrant ssh-config) default
vagrant
파이프에 연결된 표준 출력을 사용하여 별도의 프로세스에서 명령을 실행합니다 . 파이프의 다른 쪽 끝은 n
실행 중인 새 프로세스에 파일 설명자(귀하의 경우 11) 로 연결되고 ssh
쉘이 실행됩니다.
ssh -F /proc/self/fd/n default
ssh
이제 이는 시작 시 파일 설명자가 닫히지 않은 경우에만 작동합니다.
불행하게도 그렇습니다.
사용되는 경우 또 다른 접근 방식은 파이프와 임시 파일을 사용하지 않고 대신 임시 파일을 사용 하는 프로세스 대체 형식을 zsh
사용하는 것입니다 .=(...)
/proc/self/fd
ssh
또는 닫히지 않은 파일 설명자를 사용할 수 있습니다. 예를 들어, 아무것도 제공하지 않으면 ssh
(원격 명령이 stdin에서 아무것도 읽지 않는 경우) fd
0을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
vagrant ssh-config | ssh -F /dev/stdin -n default
답변2
@cbliard 기반
이것은 작동합니다:
ssh -F =(vagrant ssh-config ) -i =(generate ssh-identity)