내 기대 스크립트
#!/usr/bin/expect -f
#I tried replacing sh - with bash -s still no positive results
spawn ssh xxxx@yyyy "sh -" < test.sh
expect "password: "
send "zzzzz\r"
expect "$ "
터미널에서 이 명령을 실행하면 제대로 작동합니다.
ssh xxxx@yyyy "sh -" < test.sh
하지만 expect
스크립트를 통해 실행하면 실패합니다.
이것은 Expect 스크립트를 통해 실행했을 때의 출력입니다. 내가 어디가 틀린지 알 수 있을까요?
bash: test.sh: No such file or directory
추신: 예, 파일이 존재하며 자격 증명이 정확합니다.
답변1
<
문제는 ssh를 단독으로 실행하면(입력한 셸을 통해) 리디렉션이 로컬에서 수행되지만 이를 실행하면 원격 시스템에서 수행된다는 것입니다. expect
제공 spawn
한 인수는 단순히 복사되므로 <
ssh 명령은 다음과 같습니다. 그 중 일부는 리모콘으로 전달됩니다. 이는 또한 'ssh' 'xxxx@yyyy' "sh -" '<' 'test.sh'
쉘에 입력한 것처럼 작동하지 않습니다.
SSH 이전에 리디렉션을 해결하려면 중간 쉘 명령을 추가해야 합니다. 예를 들어,
spawn sh -c "ssh xxxx@yyyy sh - < test.sh"