SSH를 통해 서버에서 원격 스크립트 실행

SSH를 통해 서버에서 원격 스크립트 실행

원격 서버에 원격 스크립트가 있습니다.

#!/bin/bash
echo Parameters=$@
echo "Ciao" $1                        

SSH 연결을 호출하여 스크립트를 실행합니다.

❯ pippo=pluto 
❯ ssh   -i rsa_r [email protected] "deploy.sh $pippo"
Parameters=
Ciao
(base)"

$pippo 매개변수를 얻지 못하는 이유는 무엇입니까?

통찰력을 얻으려면 -v 옵션을 추가하십시오.

...
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Remote: /home/developer/.ssh/authorized_keys:6: key options: agent-forwarding command port-forwarding pty user-rc x11-forwarding
debug1: Remote: /home/developer/.ssh/authorized_keys:6: key options: agent-forwarding command port-forwarding pty user-rc x11-forwarding
debug1: Sending environment.
debug1: Sending env LANG = C.UTF-8
debug1: Sending command: deploy.sh $pippo
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
Parameters=
Ciao
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 3264, received 3128 bytes, in 1.5 seconds
Bytes per second: sent 2228.4, received 2135.6
debug1: Exit status 0

pippo또한 매개변수를 대신 으로 변경해도 상관없습니다 $pippo. 회의적인 사람들을 위해:

여기에 이미지 설명을 입력하세요.

답변1

로컬 셸은 변수를 $pippovalue 로 확장할 수 없으며 pluto명령 ssh은 리터럴 문자열을 확인합니다 deploy.sh $pippo.

debug1: Sending command: deploy.sh $pippo

원격 쉘은 이를 평가 $pippo하고 비어 있음을 발견하여 deploy.sh인수 없이 실행됩니다.

나는 당신이 실행하고 있는 명령이 당신이 우리에게 보여준 명령이 아니라고 제안합니다. 따옴표를 다시 확인하세요. 실제로는 큰 따옴표보다는 작은 따옴표를 사용했을 가능성이 높습니다.

그런데 스크립트에서는 사용 중인 변수를 큰따옴표로 묶어야 합니다.

#!/bin/bash
echo "Parameters=$*"
echo "Ciao $1" 

관련 정보