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