首页 文章

面对使用TCL将文件从一台服务器传输到另一台服务器的困难

提问于
浏览
1

我试图借助TCL脚本将文件从一台服务器传输到远程服务器 . 但是我的脚本在消息“200 Port set okay”之后停止,并继续从下面的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"

输出

spawn ftp 10.87.121.26
Connected to 10.87.121.26.
220 VxWorks FTP server (VxWorks VxWorks5.4.2) ready.
Name (10.87.121.26:vkumar): user
331 Password required
Password:
230 User logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd FW
250 Changed directory to "C:/FW"
ftp> ha
Hash mark printing on (1024 bytes/hash mark).
ftp> bi
200 Type set to I, binary mode
ftp> mput "mm155_005.006.010.200_bt.fw"
mput mm155_005.006.010.200_bt.fw? yes
200 Port set okay                         \ I am unable to see hash progress bar after this line
spawn telnet 10.87.121.26
Trying 10.87.121.26...
Connected to 10.87.121.26.
Escape character is '^]'.

Login: user
password: 

node84.7.PXM.a > cd FW

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

3 回答

  • 1

    报告的脚本不太可能产生完全相同的输出;在 mput 之后 ls 没有任何内容 . 但是,如果 mput 悬挂最可能的问题是有一个firewall issue; FTP使用多个套接字来进行文件传输(这就是为什么FTP在整体防火墙管理方面如此痛苦) . 特别是,它有一个命令通道(与FTP服务器通信的套接字)和每个文件的单独数据通道(以及一些远程命令的输出,如 ls );这就是 Port set okay 的意思 . 这不是防火墙友好的,并且在这个区域中很容易错误配置防火墙(特别是在有NAT的情况下) .

    您可能(即,首先尝试此操作)希望使用被动模式,因为这会降低防火墙级别的复杂性 . 尝试在 mput 之前发出 passive (正如您目前发布 bi nary一样) .

  • 0

    而不是在Expect中推出自己的解决方案(我在大约9年前也做过这个),使用tcllib中的FTP模块 - 它已经在战斗中变硬了 .

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

  • 3

    这是我用类似函数编写的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
    

相关问题