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" 

おすすめ記事