그래서 기본적으로 서버에 ssh를 연결하고 거기에서 로컬 기대 스크립트를 실행하려고 합니다. bash 명령과 비슷한 것을 시도해 보았습니다.
ssh -A user@remote "bash -s" < ./script "arg1" "arg2"
내 예상 스크립트 형식은 다음과 같습니다.
ssh -A user@remote "expect" < ./script "arg1" "arg2"
하지만 계속해서 다음과 같은 오류가 발생합니다.
couldn't read file "arg1": No such file or directory.
제 생각엔 첫 번째 매개변수를 파일로 읽으려고 하는 것 같고 이 게시물을 보고 그 내용을 알아내려고 노력한 것 같습니다.원격 시스템에서 로컬 스크립트를 실행하고 매개변수를 포함하는 방법은 무엇입니까?그러나 이러한 솔루션 중 어느 것도 나에게 효과적이지 않았습니다. 무엇이 문제일까요?
감사해요
답변1
expect
-
누군가가 슬롯을 사용하더라도 마치 파일인 것처럼 첫 번째 인수부터 읽으려고 매우 열심히 노력하는 것 같습니다 . 한 가지 해결 방법은 읽을 /dev/stdin
수 있는 파일 이름을 제공하는 것 같습니다 expect
.
$ printf 'puts [lindex $argv 1]' | ssh host 'expect /dev/stdin one two'
two
$
답변2
가장 쉬운 방법은 scp
원하는 스크립트를 원격 시스템으로 보내고 그곳에서 실행하는 것입니다. 이렇게 하면 하루를 엉망으로 만들고 시간을 낭비할 수 있는 모든 종류의 참조, 파일 설명자, 변수 범위 문제 등을 방지할 수 있습니다.
더 나은 옵션은 예상 스크립트를 스크립트 perl
(네트워크::SSHCPAN 모듈은 이 작업에 적합합니다. 더 일반적인 것도 있습니다예상되는CPAN 모듈) 또는 python
사용 가능한 여러 모듈 중 하나를 사용하는 스크립트 로SSH 방법또는예상되는.
expect
IMO, 당신이 아직 언어 나 언어의 전문가가 아니라면 tcl
이와 같은 좁은 도구를 배우는 것은 expect
일반적인 도구/언어에 대한 기술을 배우거나 향상시키는 데 더 효과적으로 소비할 수 있는 시간 낭비입니다.