
Bashスクリプトには次のものがあります
ssh -T -i ${ssh_key} ${ssh_user}@${host} <<- 'EOF'
file=`hostname`.tar.gz
echo "file: " $file
### prints>> file: some-host-name.tar.gz
EOF
scp -i ${ssh_key} ${ssh_user}@${host}:${file} ~/incoming
### prints>> scp -i /home/user/.ssh/key.pem [email protected]: ~/incoming
接続するホストに基づいてheredocにファイル名を設定しようとしています。その後、そのファイル名を使用してファイルを別の場所にscpしたいのですが、heredocの外部からファイル名を取得することはできません。
提案?
答え1
これはheredocsには問題ありません。実行する場合:
ssh -i ${ssh_key} ${ssh_user}@${host} sh -c '
file=`hostname`.tar.gz
echo "file: " $file
'
効果は同じです。主なポイントは、変数がリモートサーバーのSSHを介して起動されたシェルで評価されることです。ローカルシェルの変数には影響しません。
したがって、次のようにします。
file=$(ssh -i ${ssh_key} ${ssh_user}@${host} hostname).tar.gz
scp -i ${ssh_key} ${ssh_user}@${host}:${file} ~/incoming
答え2
remote_user_name=user
instance_ip=127.0.0.1
external=$(ls /home/)
ssh -T -i ${private_key} -l ${remote_user_name} ${instance_ip} << END
internal=\$(ls /home/)
echo "\${internal}"
echo "${external}"
END