- PR -

シェルスクリプトでftpに自動ログインする方法

投稿者投稿内容
Tatsuya
ベテラン
会議室デビュー日: 2007/04/02
投稿数: 53
投稿日時: 2007-04-13 20:09
OS:RedHat Linux

現在、AサーバーのあるファイルをBサーバーにアップロードするというスクリプトを書いているのですが、

ftp $host
$ftp_user
$ftp_passwd

put $lfile $rfile

という風に書いてもログインしてくれないんですね。
.netrcファイルを使わなくて自動ログインして、アップロードする方法ってありませんか?
_________________
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-04-13 20:13
こんばんは。
そういった対話処理を書くなら、せめて expect で。

わざわざ FTP を使わなくても、scp であれば楽に対処できそうに思いますが、如何でしょう。
Tatsuya
ベテラン
会議室デビュー日: 2007/04/02
投稿数: 53
投稿日時: 2007-04-13 20:48
初心者なもので、expectやscpのことはまったく知りませんでした。
scpの場合でもパスワードを聞かれるのですが?
設定ファイルなどを使わなくてリモート間のファイル転送をする方法だと、expectくらいなのでしょうか?
_________________
F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2007-04-13 22:20
http://www.itmedia.co.jp/help/tips/linux/l0462.html

まぁ、変数で渡したいとなると
一時ファイルを作って実行させることになりますかね…

※perlでやる方が早そうですけど

scpは公開鍵認証なら自動化できます。


<追加>
#!/bin/sh
echo -e "open localhost\nuser root password\nls\nquit" | ftp -n


[ メッセージ編集済み 編集者: F/A 編集日時 2007-04-13 22:44 ]
Tatsuya
ベテラン
会議室デビュー日: 2007/04/02
投稿数: 53
投稿日時: 2007-04-13 23:01
>> F/Aさん
回答ありがとうございます。

一つ書くの忘れていたのですが、転送する前に、あるディレクトリをZIPに固める作業がいるんです。それだとしても可能ですか?
_________________
F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2007-04-13 23:21
ftpで実現する方法も含めて、方法は前掲に提示しています。

> 転送する前に、あるディレクトリをZIPに固める作業がいるんです。それだとしても可能ですか?

特に問題にはならないですよ。


Tatsuya
ベテラン
会議室デビュー日: 2007/04/02
投稿数: 53
投稿日時: 2007-04-14 00:18
>> F/Aさん

たとえば、ファイルbk.shの内容が

zip -r hoge /hoge
open ftp.exmple.com
user hegehge password
bin
prompt
cd directory
put /hoge/hoge.zip /hoge
quit

というようなファイルでも、ftp -n < bk.shでうまく動作するのでしょうか?

できれば、./bk.shみたいな方法でできれば一番いいのですが。

[ メッセージ編集済み 編集者: Tatsuya 編集日時 2007-04-14 00:22 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-04-14 01:31
こんばんは。
なるほど、ftp の -n オプションで、コマンドを非対話的に渡せるのですね。

さて、Tatsuyaさんのご希望に沿うとすれば、bash(1) ヒアドキュメントを使うと良さそうです。
コード:
#!/bin/sh
前処理
ftp -n <<_EOS_
FTPコマンド
…
_EOS_


のような形で組めるでしょう。

※ところで、Tatsuya さんのスクリプトの書き方を見るに、「ユーザが入力する内容を記したファイル」のことをシェルスクリプトと考えているように感じます。
もしそうならば、それは違いますので注意が必要です。
正しくは、ビルトインコマンドや、プロセス実行を組み合わせたプログラム、ですから。

スキルアップ/キャリアアップ(JOB@IT)