How to use expect in Bash script and ssh-copy-id
8,740
Solution 1
The problem is that the ssh client is reading directly from the terminal for the password, not from stdin.
The easiest way I know around this is to install 'sshpass', then use this (without Expect):
sshpass -p "thepassword" ssh-copy-id -i /home/user/.ssh/id_rsa.pub [email protected]
Solution 2
You are copying the key to /root/.ssh/authorized_keys
rather than the user account. Note where it says: [email protected]'s password:
Solution 3
The following script should do the trick too
#!/usr/bin/expect -f
#
# Install RSA SSH KEY with no passphrase
#
set user [lindex $argv 0]
set host [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh-copy-id -i /path/to/your/.ssh/id_rsa.pub $user@$host
expect {
"continue" { send "yes\n"; exp_continue }
"assword:" { send "$password\n"; }
}
You need to make it executable, and call it as follow:
./ssh-copy-id.exp <user> <host> <password>
In your case:
./ssh-copy-id.exp root 111.111.111.111 thepassword
Related videos on Youtube
Comments
-
Roger over 1 year
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 [email protected]'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?
-
foxfabi over 8 yearsduplicate: unix.stackexchange.com/q/234639/4667
-
-
FooBee over 8 yearsFixed that to contain the actual username, see @seumasmac's answer.
-
derHugo over 6 yearsThis is still missing to continue when getting the
ECDSA key
message.. -
Andrew Schulman almost 6 yearsWelcome to ServerFault. If you want your answer to be useful, please take time to format it correctly, and also explain it.