expect实现ssh自动交互
由于最近刚接手一批oracle数据库服务器,只能使用指定用户oracle进行相关操作。而且ssh没有做public...
扫描右侧二维码阅读全文
04
2008/09

expect实现ssh自动交互

由于最近刚接手一批oracle数据库服务器,只能使用指定用户oracle进行相关操作。而且ssh没有做public key,并且也没有权限做ssh的public key,使用shell脚本居然问我一次又一次的要密码,怎么脚本自动化?没办法,只能使用expect来实现了。
一般使用ssh的public key的ssh脚本如下:

#!/bin/sh servers=`cat /etc/hosts | grep -v ^# | grep ^192.168.1 | cut -f1` username="oracle" echo exec cmd all... for server in $servers; do echo "##########################################" echo $server ssh $username@$server $1 echo "##########################################" done wait echo complete!

上面是shell脚本,这里就不多解释了,相信大家都能看明白。$1可以是运行命令也可以执行脚本,随便你,只要你喜欢!
如果不允许或者没有权限使用ssh的public key,那么只能使用expect进行ssh自动交互了

#!/usr/bin/expect set username "oracle" #ssh的用户名 set passwd "oracle11" #ssh的密码 set servers [exec cat /etc/hosts | grep -v ^# | grep ^192.168.1 | cut -f1] #读取hosts中要访问的主机 foreach server $servers { #循环 spawn ssh $username@$server "[lindex $argv 0]"; #执行ssh,注意expect中输入的第一个变量用$argv 0表示。 expect "*password: "; sleep .1; send "$passwd\r"; #当出现提示输入密码时,自动输入密码 interact; }

ok,这样指定的一般用户在ssh且不能使用key时就不用一次次输入密码了。

Last modification:November 26th, 2018 at 04:16 pm
If you think my article is useful to you, please feel free to appreciate

One comment

  1. syw

    我测试用这样的方法虽然能完成登录,但有个问题,登录进去后,不能显示执行命令的输出,interact似乎不能显示会话的stdout, 兄台没有碰到这个问题吗?如果碰到了,怎么解决的?万望告知,不胜感激!

Leave a Comment