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_COMMAND2番目のセッションでは、最初のセッションで生成された変数を使用する必要があります。最初のアイテムで試してみましたが、エクスポートされず、exportエラーが発生しました。 Bashでどのようにこれを達成できますか?

注:SSHセッションは異なるリモートノード、つまり2つの異なる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同じローカルシェルから両方のコマンドを呼び出す場合は、シェルにその変数の1つにコマンドを保存させます。

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文法のコードです。

おすすめ記事