SSHセッションのCase文に変数を渡すことはできますか?

SSHセッションのCase文に変数を渡すことはできますか?

SSHセッションにケースの説明があるとします。変数を渡したいです。入り口リモートコンピュータから削除し、ローカルコンピュータのcsvファイルに保存します。
この例:

#!/bin/sh
set -x
    
read -p 'Enter the raspberry ip address you want to connect:' Rasp_id
entry=$(sshpass -pthe@Donut ssh -oStrictHostKeyChecking=no pi@"$Rasp_id" "$(cat << 'E3


    cd
    read -p 'Enter the case you want to configure\n 1.1 WM \n 2.1 LWM\n' option

    case $option in

    (1)
    read -p 'config_wide_motion token' token_w_m
    cat SoundEye/NoCAN/config_nocan.json
    cat SoundEye/NoCAN/config_processor_motion.json
    entry="1_WM"
    ;;

    (2)
    read -p 'config_laser_wide_motion token:' token_l_w_m
    cat SoundEye/NoCAN/config_nocan.json
    cat SoundEye/NoCAN/config_processor_motion.json
    entry="1_LWM"
    ;;
    esac

E3
)"
)
printf "$entry"

ところで私が望む効果が出ませんね。このアイテムが見たいです。1_WMまたは1_LWM最後の行が完了したら

答え1

あなたの:

entry=$(
  sshpass...
)

出力をキャプチャして変数sshpassに保存します。$entry

SoundEye/NoCAN/config_nocan.jsonSoundEye/NoCAN/config_processor_motion.jsonそして(接続コマンド!?を2回呼び出して)の内容を出力しcatます$entry

$entryリモートシェル変数の内容(bash使用しているbashに固有のように見える)を出力しないため、その変数をローカルシェル変数read -pに送信しません。$entry

すでに構造化された(json)コンテンツを使用しているため、その情報も含めてリモートシェルに次の内容を出力できます。

printf '{ "type": "%s", "config_nocan": %s, "config_processor_motion": %s }\n' \
  "$entry" \
  "$(<SoundEye/NoCAN/config_nocan.json)" \
  "$(<SoundEye/NoCAN/config_processor_motion.json)"

したがって、$entryローカルシェルにはjson構造化データがあります。だからあなたはこれを行うことができます:

type=$(printf '%s\n' "$entry" | jq -r .type)
config_nocan=$(printf '%s\n' "$entry" | jq .config_nocan)
...

sshしかし、あなたの特別なケースでは、すべてのユーザー対話をローカルに維持し、必要な情報を送信するためにのみ使用する方が合理的だと思います。

答え2

私はこれが現代の安全基準を破ると思います。興味深いことに、リモートシステムにデフォルトのリスナーを作成し、ここにメッセージを投稿して操作を実行し、データを保存します。あるいは、共有ディスクを使用することもできます。

関連情報