我试图借助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 回答
报告的脚本不太可能产生完全相同的输出;在
mput
之后ls
没有任何内容 . 但是,如果mput
悬挂最可能的问题是有一个firewall issue; FTP使用多个套接字来进行文件传输(这就是为什么FTP在整体防火墙管理方面如此痛苦) . 特别是,它有一个命令通道(与FTP服务器通信的套接字)和每个文件的单独数据通道(以及一些远程命令的输出,如ls
);这就是Port set okay
的意思 . 这不是防火墙友好的,并且在这个区域中很容易错误配置防火墙(特别是在有NAT的情况下) .您可能(即,首先尝试此操作)希望使用被动模式,因为这会降低防火墙级别的复杂性 . 尝试在
mput
之前发出passive
(正如您目前发布bi
nary一样) .而不是在Expect中推出自己的解决方案(我在大约9年前也做过这个),使用tcllib中的FTP模块 - 它已经在战斗中变硬了 .
http://tcllib.sourceforge.net/doc/ftp.html
这是我用类似函数编写的bash脚本;
您应该能够根据您的需求进行调整 .
在SSH中添加几行并运行脚本应该是非常简单的 .
作为旁注;你为什么要用这个TCL?