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및 (연결 명령 !?을 두 번 호출하여 ) 의 내용을 출력하므로 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

나는 이것이 현대의 안전 기준을 깨뜨릴 것이라고 생각합니다. 흥미롭게도 원격 시스템에 기본 수신기를 만들고 여기에 메시지를 게시하여 작업을 수행하고 데이터를 저장합니다. 아니면 공유 디스크를 사용할 수도 있습니다.

관련 정보