私はヒアドキュメントでこのようにSSH経由でコマンドを実行しようとしています:
ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
これは、sudoのパスワードなど、入力が必要なものを実行しようとしている場合を除いて、通常は機能します。その場合、次のメッセージが表示されます。
sudo: no tty present and no askpass program specified
-t
SSH のフラグを使用して、次のような疑似ttyを割り当てることができます。
ssh -t example.com "sudo /etc/init.d/apache2 reload"
動作しますが、ヒアドキュメントで同じことをしようとすると、動作せず、ttyが存在しないという同じエラーが発生します。
ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
どうすればこれを機能させることができますか?
また、なぜ同じ行に渡すのではなく、ヒアドキュメントを操作する必要があるのか疑問に思う場合は、入力コマンド(いくつかある場合があります)がスクリプトによって読み取られた構成ファイルから取得されるためです引用符や二重引用符などのコマンドをエスケープする問題を回避できると聞きました。