SSHでスクリプトを実行し、いくつかのパラメータをスクリプトに渡そうとします。以下を試しましたが、成功しませんでした。値が渡されませんでした。
$ LC_FOO=x ssh -o SendEnv=LC_FOO $HOST < myLongScript.sh
ターゲットホストは時々非常に制限され、定期的に再生成されるため、SSH設定を変更することは役に立ちません。
だから私はトリックを使ってスクリプト自体の中で値を渡そうとしました。つまり、スクリプトに変数を追加したいのです。
私も別の方法を試しました:
# doesn't work - 'ambiguous redirect'
$ ssh ... < $(...)
# doesn't work - 'LC_FOO=x: command not found'
$ $(echo "FOO=x"; cat myLongScript.sh) | ssh ...
ssh
入力の前にその行を追加するにはどうすればよいですか?
答え1
答え2
LC_FOO
最初の例は、AcceptEnv
サーバー側のファイルのリストにあるように変数を有効にすると機能します。/etc/ssh/sshd_config
$ grep AcceptEnv /etc/ssh/sshd_config
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
AcceptEnv LC_FOO
今動作します:
$ LC_FOO=x ssh -o SendEnv=LC_FOO [email protected] 'printenv LC_FOO'
x
代替
リダイレクト方法私は次のタイトルの別のU&L Q&Aでこれを実演しました。リモートシステムでローカルスクリプトを実行し、パラメータを含める方法は?、あなたの例は、次を提案します。
$ ssh serverA "bash -s" -- < ./ex.bash "arg1" "arg2"
整理方法
他のU&L Q&Aタイトルで強調されたheredocスタイルを使用することもできます。シェルスクリプトで$ PATHのリモート値を表示する:
[root@skinner ~]# ssh mulder 'bash -s <<EOL
> echo $HOSTNAME
> hostname
> EOL'
mulder.bubba.net
mulder.bubba.net