On Fri, 2009-04-24 at 11:16 +0100, Sharpe, Sam J wrote:
Dan Track wrote:
> 2009/4/24 Manuel Aróstegui <manuel(a)todo-linux.com>:
> > On Fri, 2009-04-24 at 10:12 +0100, Dan Track wrote:
> >> Hi Guys,
> >>
> >> I've written a simple for loop see below:
> >>
> >> for i in orion earth;do scp /etc/hosts /etc;done
> >>
> >> I have a small scripting knowledge so would appreciate some help. What
> >> I'd like to do is somehow change the above so that the script prompts
> >> me for a password and when I give the script the password it will use
> >> it to auto-reply to any password promtps that scp asks for when
> >> logging into all the servers. If I am right I believe readline needs
> >> to be used. If it can't be done in bash can you give me a perl
> >> alternative please.
> >>
> >> Thanks for your help.
> >>
> >> Dan
> >>
> > Hi Dan,
> >
> > You might want to use autoexpect for that.
> >
> > This can get you in security problems since you'd need to write your
> > password in the script, but as long as you use user and groups perms
> > correctly you should kinda safe.
> >
> > Manuel.
> >
> Hi Manuel,
>
> Thankyou for your suggestion, is there any chance of getting the above
> scripted by yourself. I've never used autoexpect before. I appreciate
> the advice anyway.
If security is not a concern, write a simple script that accepts the
password and provides it to sshpass (which isn't packaged for Fedora as
it's a huge huge security nightmare):
http://freshmeat.net/projects/sshpass/
e.g.:
[sam@sam ~]$ export SSHPASS=mypass
[sam@sam ~]$ sshpass -e ssh unixdb2-vm
[sam@unixdb2-vm ~]$
In your case, you'd want something like "sshpass -e scp /etc/hosts
orion:/etc/"
Dan,
The "magic" of autoexpec is that it does everything you do for you, here
you are an example:
First I start autoexpect and then I do whatever I want expect to do for
me
root@life:~# autoexpect
autoexpect started, file is script.exp
root@life:~# ssh root(a)192.168.50.1
root(a)192.168.50.1's password:
Last login: Fri Apr 24 12:45:04 2009 from 192.168.50.103
[root@galaga ~]# ls /opt/lzo-2.02/
aclocal.m4 autoconf ChangeLog config.log configure.ac examples
libtool Makefile.am NEWS stamp-h1 util
asm B config.h config.status COPYING include
lzotest Makefile.in README tests
AUTHORS BUGS config.hin configure doc INSTALL
Makefile minilzo src THANKS
[root@galaga ~]# exit
logout
Connection to 192.168.50.1 closed.
root@life:~# exit
exit
autoexpect done, file is script.exp
root@life:~# chmod +x script.exp
Now I execute my script:
root@life:~# ./script.exp
spawn /bin/bash
root@life:~# ssh root(a)192.168.50.1
root(a)192.168.50.1's password:
Last login: Fri Apr 24 12:46:01 2009 from 192.168.50.103
[root@galaga ~]# ls /opt/lzo-2.02/
aclocal.m4 autoconf ChangeLog config.log configure.ac examples
libtool Makefile.am NEWS stamp-h1 util
asm B config.h config.status COPYING include
lzotest Makefile.in README tests
AUTHORS BUGS config.hin configure doc INSTALL
Makefile minilzo src THANKS
[root@galaga ~]# exit
logout
Connection to 192.168.50.1 closed.
root@life:
I had to change some minor stuff in script.exp to adapt it to my system
but all the major stuff is done automatically.
Anyways, as Joachim, you might want to read a little bit about expect
before trying this.
Manuel.