views:

899

answers:

8

First of all, I am well aware of that there are many of questions regarding this topic. I have read them, but still could figure out an appropriate answer for my situation.

I would like to scp the entire ~/cs###/assign1 dir from local to school home dir with a shell script. My question is, is there a way in my script to wait for the password prompt, and then simulate key board event to 'type' in my password?


here is a really detailed guide of how to set up the key

+7  A: 

Are ssh keys not allowed? That would be a better solution.

BZ
Yeah, that's the key. :-)
Jeffrey Hantin
+2  A: 

I don't think you can easily do that. What you can do is using public key authentication instead.

Something along these lines

ssh-keygen -t rsa
ssh school mkdir .ssh/
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys"

(or dsa).

But hey, it's not serverfault, is it? ;-)

Michael Krelin - hacker
The server and everything was setup by school, I have no control of the setting at that end
derrdji
These settings are in your home directory.
Michael Krelin - hacker
+2  A: 

Consider using keys, or an external library.

I don't think it's possible otherwise (I hope I'm not wrong), as it imposes automatic brute force intrusion and sniffing of passwords.

There are libraries that can do what you want (use the SFTP protocol, not calling scp), such as libssh.

Again, I highly recommend keys.

LiraNuna
C'mon, automating brute force attacks can be done using libraries as well ;-)
Michael Krelin - hacker
A: 

If you can mount the directory from a Windows machine (e.g. via AFS, NFS or SMB which my university's Windows labs all did), you can use pscp with the -pw switch.

jeffamaphone
A: 

Why not just use the "-r" option to copy it recursively? Or use rsync instead?

You could also use public key authentication, which requires no help on their end as long as you have an actual user account. See this

kwatford
+1  A: 

Something like this - http://code.google.com/p/enchanter/ ?

cms
A: 

You don't say which platform you are using at home and at school. Assuming Linux, Cygwin or OS/X you have several options:

  1. Public key authentication if it hasn't been turned off at the server
  2. ssh-agent and ssh-add to enter your password once per session

For option (1), you would

  1. generate a keypair at home using ssh-keygen, with no passphrase on the private key. Note that omitting a passphrase is probably not a good idea if other people use the same computer, but your objective was to get around having to type in the password.
  2. upload the PUBLIC key to your school account and place it in ~/.ssh/authorized_keys
  3. Use scp with the "-i identityfile" option, where identityfile is the full path to your private key. Or, add an entry to .ssh/config (see the man pages)

For the second option, ssh-agent allows you to cache your password in a local process one time per session. You set an expiration time

Jim Garrison
+1  A: 

I agree that you should use keys. But expect can automate the interactive aspect of the process IF you want to hardcode your password in a plain-text script file.

glenn jackman