シェルスクリプトを作ってください。

Fedora4で下記のFTPコマンドをcronで実行したいとします。が、シェル(bash)で直接実行した時点でうまく動きません。proxy(ユーザー名@接続先)経由で、FTPは/usr/bin/ftpです。
ftp
open 192.168.1.1 21
username@FTPhostIP
password
ls
by

コマンドをひとつずつ叩いていくとちゃんと接続できます。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答8件)

id:klamath No.1

回答回数4ベストアンサー獲得回数0

ポイント10pt

ftp -n 192.168.1.1 << _EOF

user username@FTPhostIP password

ls

by

_EOF


ftpをインタラクティブモードにすれば、動きませんでしょうか?

id:double2you

上記試して見ましたがダメでした。引数は-i -v -nもつけてみました。インタラクティブモードってmgetとか以外にこういう場合にも使うのですか?よく知らないんです。

2005/12/06 19:56:54
id:Kumappus No.2

回答回数3784ベストアンサー獲得回数185

ポイント10pt

ftp 以降はftpのコマンドプロンプト(というか)なのでbashにそのまま書いてもうまくいきません。

本当にやりたいことがわからないので(このままだと単にftpの出力としてlist出しておしまい)「定期的に外部のFTPサーバのリストを取ってその結果をどこかに保存する」だとすると、Fedoraだとlftpというコマンドがあるのでそれを利用した方がよいと思います。


まず、実行ユーザーのホームの.lftprcまたは/etc/lftp.confにあるftp:proxyのところをコメントアウトして質問の例なら


set ftp:proxy ftp://192.168.1.1

とします。

で、適当なスクリプトファイルに


open FTPhostIP -u username,password(実際にはopen 11.22.33.44 -u daresore, passwordみたいに書く)

ls > 出力先ファイル名

bye


を書き、

lftp -f scriptFile

で実行させます。

id:double2you

やりたいのは単純にあるファイルを定期的にFTPで上げたいんです。例には書きませんでした、すみません。

このぐらいの作業ならlftp使わなくていいのかなと思いまして・・・。lftpのほうが簡単なんでしょうか?

2005/12/06 20:02:05
id:haru1234 No.3

回答回数12ベストアンサー獲得回数0

ポイント10pt

http://kamakura.cool.ne.jp/oppama/misc/shelltips.html

uebu: B�V�F����UNIX�R�}���h�̊o����������

やり方は色々あると思いますが、ftp -nで

ファイルからコマンドを読み込めばうまくいくと思います。


#!/bin/bash

umask 066

echo open 192.168.1.1 >> temp.txt

echo user username password>> temp.txt

echo ls >> temp.txt

echo by >> temp.txt

ftp -n < temp.txt

rm temp.txt

id:double2you

ありがとうございます。特に現象変わらず

usage: /usr/bin/ftp host-name [port]

password:name (192.168.1.1:FEDORAUSERNAME):

と返事が返ってきます。

2005/12/06 20:14:51
id:nyomonyomo No.4

回答回数17ベストアンサー獲得回数0

ポイント10pt

現在FedoraCore4で自動的にサイトにファイルをアップロードするスクリプトを自分で作って使っています。

その時にかなり悩んだのですが、私の場合には実は呼んでるftpコマンドが

/usr/kerberos/bin/

にある物で

Please login with USER and PASS.

Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

というエラーが出てました。

ただ、その後また繋がらなくなり結局lftpを使うことにしましたorz

現在使っているのは

#!/bin/sh

/usr/bin/lftp -f ~/ftpup


~/ftpupの内容

open 192.168.1.1

user ユーザ名 パスワード

put アップロードするファイル

quit


という内容のものです。

id:double2you

ありがとうございます。

試してみて「おおっ!」と思いましたが、「再接続を遅延しています」のまま延々繰り返しです。

手打ちしてみましたが同じメッセージです。

(手打ちと同じメッセージが出ただけでうれしい。orz)

2005/12/06 20:32:06
id:yuiti_it No.5

回答回数11ベストアンサー獲得回数1

ポイント10pt

のかった回答で恐縮ですが

open 192.168.1.1

user ユーザ名 パスワード

set ftp:passive-mode off

put アップロードするファイル

quit


とuserとputの間の行に入れてもだめでしょうか?

id:double2you

ありがとうございます。返事遅くなりましてすみません。Setコマンドいれてみましたがだめでした。

2005/12/07 13:53:33
id:ton-boo No.6

回答回数55ベストアンサー獲得回数5

ポイント30pt

-nオプションの話が出ている時点でひょっとしたら検討済みなのかもしれませんが、念のため、.netrcファイルを作るという手もご紹介しておきます。

--

cat <<END >~/.netrc

machine 192.168.1.1

login username@FTPhostIP

password password

macdef init

ls

bye


END

chmod 400 ~/.netrc

--

とやっておいて、

ftp 192.168.1.1

で自動実行できるかと思います。


なお、URLのmanページにもありますが、.netrcファイルのパーミッションが緩いと自動ログインは中断してしまうはずなのでご注意ください。

id:double2you

ありがとうございます。残念ながらproxyで蹴られてしまうようです。421errorです。

2005/12/07 14:12:00
id:karla No.7

回答回数130ベストアンサー獲得回数4

ポイント10pt

http://www.nurs.or.jp/~sugi/netrc.htm

ftpの操作をマクロ登録する

私の場合はnetrcを使って自動化していました。

パーミッションの設定は忘れないようにして下さい。

id:double2you

ありがとうございます。

Macro definition missing null line terminator.

421 Service not available

だそうです。orz

追記:ググって.lftprcに

set ftp:proxy 192.168.1.1

set hftp:proxy 192.168.1.1

set ftp:use-hftp off

と書いてみたら「再接続を遅延しています」のメッセージはでなくなりました。

ただ、.netrcの「ls」や「by」のコマンドは実行できていない状態です。

lftp username@HostIP@ProxyIP:/>のプロンプトが出て、手打ちでのコマンドは動くようになりました!

追記2:すみません、上記は勘違いでした。

.lftprcに書いて

lftp 192.168.1.1

と実行したらログインまでできたということで、スクリプトファイルは読ませていませんでした。

読ませたところ「遅延しています」ではなく「データ接続を待っています」のメッセージです。

このままlftpで進行したいと思いますが、あと何が足りないんでしょう?

もう一手間お力を貸してください。

追記3:もっと進みました。

lftpでログインしてファイル(1個)をアップロードするまでに来ました。

スクリプトの中身はnyomonyomoさんのを参考にさせていただき

cd /home/test

put helloworld

quit

です。

helloworldをputしたところで「送受信の完了を待っています」となったままです。

これでちゃんと終了できれば出来上がりかも☆

2005/12/07 17:00:21
id:ton-boo No.8

回答回数55ベストアンサー獲得回数5

ポイント30pt

lftpで行く方向にまとまりつつあるようですが、まだ回答受付中のようなので6番7番の回答に補足しておきます。


.netrcの最後にはマクロの終了を示す空行が必要ですが入っていますか? この空行がないと

Macro definition missing null line terminator.

と蹴られます。そのまま時間がたてば421になるでしょう。

id:double2you

ton-booさんありがとうございます。.netrcに空行入れたら動きました!解決です!

2005/12/09 16:42:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません