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