SSH를 사용하여 원격 명령을 실행하면 "bash:/dev/fd/63: 해당 파일 또는 디렉터리가 없습니다."가 표시됩니다.

SSH를 사용하여 원격 명령을 실행하면 "bash:/dev/fd/63: 해당 파일 또는 디렉터리가 없습니다."가 표시됩니다.

/root/test.sh원격 서버에 다음이 있습니다 .

#!/bin/bash
date

원격 서버에서 다음과 같은 출력을 얻습니다.

# ./test.sh
Fri Dec 18 07:41:10 EST 2015

# bash <(cat /root/test.sh)
Fri Dec 18 07:41:23 EST 2015

그러나 로컬 컴퓨터에서 동일한 명령을 실행하려고 하면 다음과 같은 결과가 나타납니다.

$ ssh root@remote_server /root/test.sh
Fri Dec 18 07:44:32 EST 2015

$ ssh root@remote_server bash <(cat /root/test.sh)
cat: /root/test.sh: No such file or directory
bash: /dev/fd/63: No such file or directory

그렇다면 지난번에 실행했을 때 문제는 무엇이었나요? 이와 같은 스크립트를 실행하는 것이 이상하다고 생각할 수도 있습니다 bash <(cat /root/test.sh). 내가 이렇게 하는 이유는 그것이 내 현실의 단순화된 버전이기 때문입니다. 내 실제 코드는 인터넷에서 다운로드하여 로컬로 실행하는 Bash 스크립트입니다. 다양한 매개변수를 사용하여 실행할 컴퓨터가 많기 때문에 로컬 컴퓨터에서 실행하려고 합니다.

답변1

이 방법으로 파일 설명자를 전달할 수 없습니다 ssh. <(...)이 구성은 시스템에 더미 파일을 생성하며 원격 시스템에서 실행될 때 의미가 없습니다.

정말로 사용하고 싶다면 따옴표로 묶고 bash가 있으면 원격 시스템에서 평가됩니다.

ssh root@remote_host "bash <( cat /root/test.sh )"

답변2

내 제안은 원격 호스트에서 스크립트를 실행하고( /root/test.sh) 실행 가능하게 만들고( chmod u+x /root/test.sh) 다음과 같이 실행하는 것입니다.

ssh root@remote_server /bin/bash -c  /root/test.sh

/bin/bash: /dev/fd/63: No such file or directory
이 답변을 읽을 수 있는 이유에 대해 [1] .

참고: 불필요한 보안 위험을 피하기 위해 명령 이름( ) 대신
전체 경로( )를 사용하는 것이 좋습니다 ./bin/bashbash2] .


또 다른 방법은

ssh root@remote_server << EOF
cat  /root/test.sh
# whatever else
EOF

두 번째 EOF까지 모든 줄을 실행합니다... 이를 변형할 수 있습니다...

답변3

최근에 같은 문제가 발생했지만 이것이 실행될 때만 발생한다는 것을 깨달았습니다.sudo/루트사용자.

내가 실행하면 :

sudo bash <(echo "It worked")

나는 얻다:

bash: /dev/fd/63: No such file or directory

하지만 내가 실행하면 :

bash <(echo "It worked")

그것은 아주 잘 작동합니다.

관련 정보