AMIからec2インスタンスを作成しています
aws ec2 run-instances [lots of arguments] --user-data file://my_sh_file.sh
my_sh_file.shは次のようになります。
su ubuntu # fails with or without this
cd /home/ubuntu/my_working_dir
git pull Origin master
. app_startup_script.sh
Gitはこのエラーログ(/var/log/cloud-init-output.logから)との接続に失敗しています:
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
自分で(ubuntuとして)ログインしてgit pullを呼び出すと、正常に機能します。
(a)su ubuntuが機能していないか、(b)(これは可能性が低いようです)ブートシーケンスのこの時点でssh構成がロードされていないかのどちらかだと思います...しかし私は困惑しています。助けて?
Sudo
の使用方法が正しくありません。
まず第一に、それはSudo -u ubuntu
だけでなくSudo ubuntu
でなければなりません。しかし、それでも機能しません。
Sudo
を実行すると、新しいシェルが生成されます。コマンドが指定されている場合は、buntユーザーの下でそのコマンドが実行されます。あなたの場合、Sudo -u ubuntu
には実行するコマンドがなく、非対話型モードであるため、シェルも生成されません。単に終了します。
次の行--cd
およびgit
-は、buntユーザーの下ではなく、serDataスクリプトのコンテキストで実行されます。そのためです。失敗します。
たとえば、これを行うことができます。
Sudo -u ubuntu sh -c "cd /home/...; git pull ...; ./app.sh"
buntユーザーの下ですべてのコマンドが実行されます。
お役に立てば幸いです:)