2013 09,06 13:40 |
|
シェルでFTPの自動送信とかはやったことがあるのだけど、
FTP自体がセキュリティ的にいろいろマズイということもあり、 FTPじゃなくてSCP(SFTP)とかで転送してやろう! と思ったけど、嵌ったので記録として記載 前提として「expect」がインストールされていること expectが入ってない場合は、yum install expect などでインストールしましょう でシェルは #!/bin/sh expect -c "
spawn scp 転送するファイルパス scpユーザ@サーバIP:/tmpディレクトリなど/
expect {
\"Are you sure you want to continue connecting (yes/no)?\" {
send \"yes\r\"
expect \"password:\"
send \"パスワード\r\"
} \"password:\" {
send \"パスワード\r\"
}
}
interact
" って感じでやってやる 初回と初回以降で対話式のメッセージが異なるので、 分岐してパスワードを送っている感じです ただし、cronとかほかのシェルから実行させる場合は、 interact が不要 その変わり、完了メッセージをexpectする という方法になります expect {\"100%\" { exit 0 }} こんな感じにね ※嵌ったので、追記 cronで実行した際に、ファイルサイズが大きいと転送される前に切れます いろいろ調べてみたら、同じことで悩んでいる方がおりました(http://slashdot.jp/journal/470783/%E3%81%88%E3%81%8F%E3%81%99%E3%81%BA%E3%81%8F%E3%81%A8) 原因は、spawn で生成されるプロセスの寿命が default で 20 秒のようです (プロセスの乱立や永遠に常駐しているプロセスを防ぐ目的だと思いますが) で、その処置として、プロセスの寿命は、"set timeout [生かしたい秒数]" で指定出来るようです PR |
|
コメント |
コメント投稿 |
|
忍者ブログ [PR] |