0

From a bash script:

source ./expect.sh

I am including a expect code:

#!/bin/bash
/usr/bin/expect <<EOL
spawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111
expect '*?assword*'
send 'thepassword'
interact
EOL

And I am getting this:

spawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111.111
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@111.111.111.111's password: 

Then I try to connect and I am prompted for a password...

Checking the server, I'm certain no key was uploaded because I would expect to list the "authorized_keys" file:

root@server: ls /home/user/.ssh/
known_hosts

What am I doing wrong?

1

In addition to the comment about "root":

  1. single quotes are just plain characters in expect. use double quotes
  2. don't forget to "hit enter" when you send the password
expect "*?assword*"
send "thepassword\r"

It's generally good practice to quote the heredoc end-word, unless you need to interpolate variables or command substitutions in the heredoc body:

some command <<'END'
# .............^...^
...
END
0

You run spawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111. The ip address seems to be wrong.

0

You can see from the password prompt: root@111.111.111.111 that you are setting up root's key on the remote, i.e. file /root/.ssh/authorized_keys. Either run the script as user, not root, or provide an explicit ssh-copy-id ... user@111.111.111.111. This allows user to login without a password, not root.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.