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

Ftp 使用TCL将文件从一台服务器传输到另一台服务器面临困难,ftp,tcl,expect,Ftp,Tcl,Expect,我正试图借助TCL脚本将文件从一台服务器传输到远程服务器。 但我的脚本在消息“200端口设置正常”后停止,并继续从下面的telnet会话中执行rum 我已检查目标位置,我的文件未传输 请建议我能做什么或我错在哪里 #!/usr/bin/tclsh #!/usr/bin/expect package require Expect set p "mm155_005.006.010.200_bt.fw" #*********************************************

我正试图借助TCL脚本将文件从一台服务器传输到远程服务器。 但我的脚本在消息“200端口设置正常”后停止,并继续从下面的telnet会话中执行rum

我已检查目标位置,我的文件未传输

请建议我能做什么或我错在哪里

#!/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>ha 哈希标记打印(1024字节/哈希标记)。 ftp>bi 200类型设置为I,二进制模式 ftp>mput“mm155_005.006.010.200_bt.fw” mput mm155_005.006.010.200_bt.fw?对 200端口设置正常\n此行后我看不到哈希进度条 繁殖telnet 10.87.121.26 正在尝试10.87.121.26。。。 已连接到10.87.121.26。 转义字符为“^]”。 登录:用户 密码: 节点84.7.PXM.a>cd-FW 节点84.7.PXM.a>bash-2.05b$
所报告的脚本不太可能精确地生成该输出;在
mput
之后,
ls
没有执行任何操作。但是,如果
mput
挂起,最有可能的问题是存在一个错误;FTP使用多个套接字进行文件传输(这就是为什么FTP在整体防火墙管理方面如此麻烦的原因)。特别是,它有一个命令通道(您通过它与FTP服务器通信的套接字)和每个文件一个单独的数据通道(以及一些远程命令的输出,例如
ls
);这就是
端口集OK
的内容。这对防火墙不友好,并且很容易在该区域错误地配置防火墙(特别是当NAT也就位时)


您可能(即,首先尝试)希望改用被动模式,因为这样可以降低防火墙级别的复杂性。尝试在
mput
之前发出
passive
(就像您当前发出
bi
nary一样)。

所报告的脚本不太可能完全产生该输出;在
mput
之后,
ls
没有执行任何操作。但是,如果
mput
挂起,最有可能的问题是存在一个错误;FTP使用多个套接字进行文件传输(这就是为什么FTP在整体防火墙管理方面如此麻烦的原因)。特别是,它有一个命令通道(您通过它与FTP服务器通信的套接字)和每个文件一个单独的数据通道(以及一些远程命令的输出,例如
ls
);这就是
端口集OK
的内容。这对防火墙不友好,并且很容易在该区域错误地配置防火墙(特别是当NAT也就位时)


您可能(即,首先尝试)希望改用被动模式,因为这样可以降低防火墙级别的复杂性。尝试在
mput
之前发出
passive
(就像您当前发出的
bi
nary一样)。

下面是我用类似函数编写的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
#/bin/bash
fileName=`ls/home/user/downloads-t1 | head-n1`
latestFile=“/home/user/downloads/$fileName”
echo$latestFile
hostname=“hostname”
用户名=“用户”
password=“PASS”

ftp-inv$hostname这是我用类似函数编写的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
#/bin/bash
fileName=`ls/home/user/downloads-t1 | head-n1`
latestFile=“/home/user/downloads/$fileName”
echo$latestFile
hostname=“hostname”
用户名=“用户”
password=“PASS”

ftp-inv$hostname使用tcllib中的ftp模块,而不是在Expect中滚动您自己的解决方案(大约9年前我也这样做了),它已经经过了考验


不要在Expect中推出自己的解决方案(大约9年前我也这么做了),而是使用tcllib中的FTP模块——它已经经过了考验


您假设提问者使用的VxWorks版本具有sshd;这些嵌入式系统在这方面往往不如你所希望的那么好。(如果他们这样做了,scp将是目前最适合发布该文件的!)使用TCL是我们的项目要求:)您假设提问者使用的VxWorks版本具有sshd;这些嵌入式系统在这方面往往不如你所希望的那么好。(如果他们这样做了,scp将是目前最适合发布该文件的!)使用TCL是我们的项目要求:)FTP包不可用。你说我的剧本不行?正如您之前所说,您已经尝试过alsoIt的纯Tcl,因此您应该能够直接使用它。FTP包不可用。你说我的剧本不行?正如您之前所说,您已经尝试过alsoIt的纯Tcl,因此您应该能够直接使用它。我尝试过被动,但它提示我它无效command@user1412256:啊!问题是玩猜谜游戏,猜猜你拥有哪个版本的
ftp
客户端。那么就按照格伦的回答去做吧。我试过被动语态,但它提示我这是无效的command@user1412256:啊!问题是玩猜谜游戏,猜猜你拥有哪个版本的
ftp
客户端。那就听格伦的回答吧。