1

TCL スクリプトを使用して、あるサーバーからリモート サーバーにファイルを転送しようとしています。しかし、「200 ポートは正常に設定されました」というメッセージの後でスクリプトが停止し、以下の telnet セッションからラムを続けます。

宛先の場所を確認しましたが、ファイルが転送されていません。

私に何ができるか、どこが間違っているかを提案してください

#!/usr/bin/tclsh
#!/usr/bin/expect

package require Expect

set p "mm155_005.006.010.200_bt.fw"

#**************************************************************\
                FILE TRANSFER TO REMOTE SERVER                  \
***************************************************************
spawn ftp 10.87.121.26
expect "User (10.87.121.26:(none)):"
send "user\r"
expect "Password:"
send "pswd\r"

expect "ftp>"
send "cd FW\r"
expect "ftp>"
send "ha\r"
expect "ftp>"
send "bi\r"
expect "ftp>"

send "mput \"$p\"\r"
expect "mput $p? "
send "yes\r"
expect "ftp>"
send "ls\r"


#**************************************************************\
                RUNNING THE TRANSFERED FILE                     \
***************************************************************

spawn telnet 10.87.121.26
expect "Login: "
send "user\r"
expect "password: "
send "pswd\r"

expect "*? > "
send "cd FW\r"

expect "*? > "
send "burnboot 30 5.6(10.200)\r"

出力

スポーンftp 10.87.121.26
10.87.121.26 に接続されています。
220 VxWorks FTP サーバー (VxWorks VxWorks5.4.2) の準備が整いました。
名前 (10.87.121.26:vkumar): ユーザー
331 パスワードが必要です
パスワード:
230 ユーザーがログインしました
リモート システム タイプは UNIX です。
バイナリ モードを使用してファイルを転送します。
ftp> cd FW
250 ディレクトリを「C:/FW」に変更
ftp>は
ハッシュマーク印刷オン (1024 バイト/ハッシュマーク)。
ftp>バイ
200 Type を I に設定、バイナリ モード
ftp> mput "mm155_005.006.010.200_bt.fw"
mput mm155_005.006.010.200_bt.fw? はい
200 ポートは正常に設定されました \ この行の後にハッシュ プログレス バーが表示されません
spawn telnet 10.87.121.26
10.87.121.26 を試しています...
10.87.121.26 に接続されています。
エスケープ文字は「^]」です。

ログイン: ユーザー
パスワード:

node84.7.PXM.a > cd FW

node84.7.PXM.a > bash-2.05b$
4

3 に答える 3

3

Expect で独自のソリューションを展開する代わりに (私も約 9 年前にこれを行いました)、tcllib の FTP モジュールを使用してください。

http://tcllib.sourceforge.net/doc/ftp.html

于 2012-05-23T12:36:41.410 に答える
1

報告されたスクリプトが正確にその出力を生成する可能性は低いです。lsの後に行われたことから何もありませんmput。ただし、mputがハングしている場合、最も可能性の高い問題はファイアウォールの問題があることです。FTPは複数のソケットを使用してファイル転送を行います(これが、ファイアウォール管理全体に関してFTPが非常に苦痛である理由です)。特に、コマンドチャネル(FTPサーバーと通信するソケット)とファイルごとに個別のデータチャネル(および、などのいくつかのリモートコマンドの出力ls)があります。それPort set okayがそれについてです。これはファイアウォールに適したものではなく、この領域でファイアウォールを誤って構成するのは簡単です(特に、NATも配置されている場合)。

代わりにパッシブモードを使用することをお勧めします(つまり、これを最初に試してください)。これにより、ファイアウォールレベルでの複雑さが軽減されます。(現在naryを発行しているのと同じように)passive前にaを発行してみてください。mputbi

于 2012-05-23T10:22:40.140 に答える
0

これは私が同様の関数で書いたbashスクリプトです。

あなたはそれをあなたのニーズに適応させることができるはずです。

SSHに数行追加してスクリプトを実行するのは、ごく簡単なことです。

補足として; なぜこれにTCLを使用しているのですか?

#!/bin/bash

fileName=`ls /home/user/downloads -t1 | head -n1`
latestFile="/home/user/downloads/$fileName"
echo $latestFile
hostname="HOSTNAME"
username="USER"
password="PASS"
ftp -inv $hostname << EOF
quote USER $username
quote PASS $password
cd transfer/jirabackup 
binary
put $latestFile $fileName
quit
于 2012-05-23T10:24:16.457 に答える