고쳐 쓰다

고쳐 쓰다

고쳐 쓰다

이 명령을 사용하여 JSON을 전달할 수 있다는 것을 알았습니다.

command -j /dev/stdin <<< '{"key":"value"}'

그런데 전화하면 안 돼요.SSH.

ssh {target} 'command -j /dev/stdin <<< '{"key":"value"}''

JSON이 아닌 문자열로 전송되는 것 같나요? 이유를 아는 사람 있나요?


JSON 문자열을 옵션에 전달해야 하는 명령이 있는데 어떤 이유로 herestringto 를 사용하여 전달해야 합니다 /dev/stdin.

command -j /dev/stdin <<< '{"key":"value"}'

답변1

원격 명령의 일부로 이 문자열을 리디렉션할 필요가 없습니다. 리디렉션한 데이터는 ssh원격 명령의 표준 입력으로 종료됩니다.

ssh remote 'some command' <<<'whatever string'

당신에 관한 한,

ssh target 'command -j /dev/stdin' <<<'{"key":"value"}'

그러나 이는 이미 JSON으로 인코딩된 key것으로 가정합니다.value

JSON 구성 jq(값이 쉘 변수에 저장되어 있다고 가정하여 값의 올바른 인코딩을 얻으려면 $value):

jq -nc --arg val "$value" '{ key: $val }' | ssh target 'command -j /dev/stdin'

또는 다음을 jo사용하여 JSON 문서를 작성합니다.

jo key="$value" | ssh target 'command -j /dev/stdin'

답변2

"SSH로 전달할 때 \\\"이것을 사용하여 통과 해야 한다는 것을 알았습니다 . 따라서 다음 명령이 작동합니다.

ssh {target} 'command -j /dev/stdin <<< '{\\\"key\\\":\\\"value\\\"}''

관련 정보