프로세스 대체<()가 ssh -F에서 작동하지 않는 이유

프로세스 대체<()가 ssh -F에서 작동하지 않는 이유

길 잃은 가상 머신이 있습니다. 이를 기록하기 위해 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에서 아무것도 읽지 않는 경우) fd0을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

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

답변2

@cbliard 기반

이것은 작동합니다:

ssh -F =(vagrant ssh-config ) -i =(generate ssh-identity)

관련 정보