http://blog.csdn.net/tantexian/article/details/45887857
http://stackoverflow.com/questions/19403360/how-to-use-expect-to-copy-a-public-key-to-a-host
Under normal conditions SSH toolchain asks the password from terminal, not from stdin. You can provide custom SSH_ASKPASS program to push your password with it.
Create a simple script askpass.sh:
#!/bin/sh
echo $PASSWORD
then configure it to be used in ssh:
chmod a+x askpass.sh
export SSH_ASKPASS=askpass.sh
finally run ssh-copy-id (without expect):
export DISPLAY=:0
PASSWORD=mySecurePassword setsid ssh-copy-id -o StrictHostKeyChecking=no hishost.thatwas.secure.com
setsid detaches from terminal (ssh will then panic and look for askpass program) DISPLAY is also checked by ssh (it thinks your askpass is a GUI)
Note that there might be hidden security vulnerabilities with this approach.