SSH 명령에서 변수를 내보내는 방법

SSH 명령에서 변수를 내보내는 방법

SSH 세션에 다음 스크립트가 있습니다.

ssh -i /path/to/private_key somebody@ip_address_2 <<'EOF'
...
# Get the join command
JOIN_COMMAND=$(kubeadm token create --print-join-command)
EOF

ssh -i /path/to/second_private_key someother@ip_address_2 <<'EOF'
...
# run the JOIN_COMMAND
$JOIN_COMMAND
EOF

JOIN_COMMAND두 번째 세션에서는 첫 번째 세션에서 생성된 변수를 사용해야 합니다. 첫 번째 항목에서 사용해 보았지만 export내보내지지 않아 오류가 발생했습니다. Bash에서 어떻게 이를 달성할 수 있나요?

참고: SSH 세션은 서로 다른 원격 노드, 즉 두 개의 서로 다른 IP 주소에서 발생합니다.

답변1

환경 변수는 다른 명령을 실행할 때 한 명령에서 다른 명령으로 전달되는 변수이며, 프로세스가 쿼리할 수 있는 가상의 위치에 있는 것이 아니라 전달되는 변수입니다.

여기서는 파일 시스템과 같은 일종의 영구 저장소를 사용하려는 것 같습니다.

ssh -i /path/to/private_key somebody@ip_address sh << 'EOF' || exit
kubeadm token create --print-join-command > join-command
EOF

이는 출력을 kubeadm홈 디렉토리 join-command의 파일 에 저장합니다.somebody

그 다음에:

ssh -i /path/to/private_key somebody@ip_address 'sh ./join-command'

또는 ssh동일한 로컬 셸에서 두 명령을 모두 호출하는 경우 셸이 해당 변수 중 하나에 명령을 저장하도록 합니다.

join_command=$(
  ssh -i /path/to/private_key somebody@ip_address sh <<'EOF'
# Get the join command
kubeadm token create --print-join-command
EOF
) || exit
printf '%s\n' "$join_command" |
  ssh -i /path/to/private_key somebody@ip_address sh

여기서는 가정한다주문하다출력은 kubeadm실제로 sh문법의 코드입니다.

답변2

원격 컴퓨터가 아닌 현재 컴퓨터에서 변수를 설정해야 합니다.

그처럼

JOIN_COMMAND=$(ssh -i /path/to/private_key somebody@ip_address_2 kubeadm token create --print-join-command)

이렇게 간단한 작업에는 "여기" 스크립트가 필요하지 않습니다.

마찬가지로 (특수 문자가 없는 경우) 다음을 수행할 수 있습니다.

ssh -i /path/to/second_private_key someother@ip_address_2 $JOIN_COMMAND

관련 정보