Chinaunix首页 | 论坛 | 博客
  • 博客访问: 52982
  • 博文数量: 32
  • 博客积分: 26
  • 博客等级: 民兵
  • 技术积分: 13
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-01 23:00
文章分类

全部博文(32)

文章存档

2013年(32)

我的朋友

分类: LINUX

2013-11-20 09:42:59


自己的脚本:
#!/bin/bash
expect  -c  "
    set timeout 3600;
    spawn su -;
    expect *assword:*; 
    send 123456\r;
    interact;";

------------------------------------------参考------------------------------------

ssh连接远程主机时候询问密码,跟su、sudo命令的默认行为一样,是不从stdin读入数据的,据称是为安全考虑,但是有时候在脚本当中确实需要无人守值的登陆。

搜索一下不难找到类似的例子,使用expect来完成密码应答:

#!/bin/bash auto_login_ssh () { expect -c "set timeout -1; spawn -noecho ssh -o StrictHostKeyChecking=no $2 ${@:3}; expect *assword:*; send -- $1\r; interact;"; } auto_login_ssh passwd user@host

StrictHostKeyChecking=no参数让ssh默认添加新主机的公钥指纹,也就不会出现出现是否继续yes/no的提示了。

expect很不错,上述代码基本可以达到要求了,能够当翻墙用的ssh -D自动登陆,执行远程命令等等,但是如果作为一个完全非交互的远程工具,应该说还一差,不能返回整个连接执行过程是否成功。


阅读(860) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~