SSH接続に配列を渡す

SSH接続に配列を渡す

SSH接続を介して配列を渡す方法。

次のように構成された配列があります。

declare -a target_array=(
    "item1 -p12345 -r"
    "item2 -p65677 -e"
)

次に、次のようにSSH接続に転送する必要があります。

ssh $server target_array=${target_array[@]}" "bash -s" <<TARGETSCRIPT
    echo "hello"
TARGETSCRIPT

しかし、これは私にエラーを与えます。

bash: -p12345: command not found

これを行う最良の方法は何ですか?私は持っていたり持っていないし{}、持っていたりせずに試してみましたが、[@]何も機能しないようです。

(これは、echo hellotarget_arrayを使用する800行のスクリプトのプレースホルダーのみです。)

ベストアンサー1

remote_code=$(cat << 'EOF'
echo Hello
for i in "${!target_array[@]}"; do
  echo "$i -> ${target_array[i]}"
done
EOF
)

ssh server bash << EOF
$(declare -p target_array)
$remote_code
EOF

リモートシェルはstdinで次のようなものを見ることができます。

declare -a target_array='([0]="item1 -p12345 -r" [1]="item2 -p65677 -e")'
echo Hello
for i in "${!target_array[@]}"; do
  echo "$i -> ${target_array[i]}"
done

リモートシェルの標準入力が中断されるのを防ぎ、sshとリモートsshdがLC_*環境変数を渡すことを許可すると仮定するには、次のこともできます。

LC_CODE="$(declare -p target_array)
$remote_code" ssh server 'bash -c '\''eval "$LC_CODE"'\'

リモートユーザーのログインシェルがわかっている場合は、bash単に次のことができます。

ssh server "$(declare -p target_array)
$remote_code"

おすすめ記事