为什么我的expect脚本运行速度这么慢......

N0TEAR 2011-05-05 12:49:12
很普通的自动登录脚本,内容如下:
#!/usr/bin/expect -f

if { $argc != 3 } {
puts stderr "Usage: deploy host username password\n"
exit 1
}

set timeout 60
set host [lindex $argv 0]
set name [lindex $argv 1]
set password [lindex $argv 2]

spawn ssh $name@$host

expect "*assword:"

send "$password\n"
expect "*$"

send "touch ttt\n"
expect "*$"

send "exit\n"
expect eof

为什么就这么点内容要执行几分钟?速度也太慢了吧......
...全文
1125 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
N0TEAR 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lgxwqq111 的回复:]

网络情况不太好
[/Quote]

见4楼
N0TEAR 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]

那你手工执行ssh/touch/exit,总共需要多长时间?
[/Quote]

见ls
N0TEAR 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 steptodream 的回复:]

2楼说的对 本身代码很短 不会慢的 慢的原因就在于你ssh连接服务器的速度 和连接后执行的操作慢

一般 如果服务器端不能进行dns解析 那么用ssh连接别的服务器就会慢 因为ssh默认会去解析dns

解决方法2个
1是服务器端 设置正确的解析服务器 echo "nameserver 8.8.8.8" > /etc/resolv.conf
2是在服务器端 修改/etc/……
[/Quote]

其实发出这帖子后我就解决这问题了......
问题出在expect "*$",这里的$好像使用了参数扩展,没有按照我的原意匹配命令行提示符$,于是就timeout了......再加上我的timeout是60s所以就执行了很长时间

至于你们说的网络问题......我是本机连本机- -

虽然换种匹配模式就能搞定这问题了,但是我还是想知道,这个$在这里到底如何匹配呢?我试了\$也没用
steptodream 2011-05-05
  • 打赏
  • 举报
回复
2楼说的对 本身代码很短 不会慢的 慢的原因就在于你ssh连接服务器的速度 和连接后执行的操作慢

一般 如果服务器端不能进行dns解析 那么用ssh连接别的服务器就会慢 因为ssh默认会去解析dns

解决方法2个
1是服务器端 设置正确的解析服务器 echo "nameserver 8.8.8.8" > /etc/resolv.conf
2是在服务器端 修改/etc/ssh/sshd_config 设置UseDNS no 重启sshd
另外在客户端把/etc/ssh/ssh_config里的GSSAPIAuthenticationyes注释掉


最后 如果你的网速很慢 自然也会影响连接速度 另外你把send里的\n换成\r试试
freetstar 2011-05-05
  • 打赏
  • 举报
回复
网络情况不太好
zaghost 2011-05-05
  • 打赏
  • 举报
回复
连接的服务器慢吧
justkk 2011-05-05
  • 打赏
  • 举报
回复
那你手工执行ssh/touch/exit,总共需要多长时间?

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧