rsyncこのやろう
アプリケーションサーバーなんかにアプリをデプロイするとき、rsyncをつかったりする。このrsyncのrshはssh+鍵でやる。こんな感じ。
rsync --rsh="ssh -i keyfile" /hoge/src fuga@dephost:/hage/project/
これを全自動でやりたいですよね、普通に。でもSSHで初めてつなげるHostだと【Are you sure you want to continue connecting (yes/no)?】って出ますよね?これが出てしまうとオペレータによる入力が必要になってそこで自動実行がとまってしまうわけです。
で、全自動(というかデプロイプログラム中)でやるにはどうしたらいいのかなーと思ってググって見た。
expectっていうやつで、対話入力を肩代わりしてもらえることが出来るらしい!これだと思って書いてみる。
環境はOS:Ubuntu1004
#!/bin/sh expect -c " spawn rsync --rsh=\"ssh -i keyfile\" /hoge/src fuga@dephost:/hage/project/ expect \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\r\" } "
rsync.shとかで保存して実行する。
sh rsync.sh
これがダメなのです…。rsyncの構文エラーでとまっちゃう。またぐぐる。
http://www.pictnotes.jp/?p=252
こちに答えっぽいのが書いてあるので、使わせていただく(ありがとうございます!)
#!/bin/sh export RSYNC_RSH="ssh -i keyfile" expect -c " spawn rsync /hoge/src fuga@dephost:/hage/project/ expect \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\r\" } "
よっしゃーおわったー。実行する。が、しかしまたエラー…。
今度は【The authenticity of host 'dephost' can't be established】と出ている。確認してないけどどうみても鍵の認証に失敗してる…。ということはRSYNC_RSHの設定が効いてないのか?Bashのexportとかちゃんと分かってないけど、spawnしたプロセスには変数のexportが効いてないってことですか??
ほかにやったこと。
いろいろ調べたつもりだけど、もう分からんです。こういう使い方してる人っていないこと無いと思うから、やり方あるんじゃないかと思うんだけど。
結局Yes/No聞かれなきゃ別にいいので
http://d.hatena.ne.jp/yohei-a/20100214/1266112027
この方法でやったらいいんだけど。
どなたかヒントでもいただけるととてもうれしいです…。すごく胸のあたりがムカムカするわ…。