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

答え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

関連情報