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?
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):
You are copying the key to
/root/.ssh/authorized_keys
rather than the user account. Note where it says:[email protected]'s password:
The following script should do the trick too
You need to make it executable, and call it as follow:
In your case:
!/usr/bin/env bash
fingerprints