Desde un script bash:
source ./expect.sh
Estoy incluyendo un código de espera:
#!/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
Y me sale esto:
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:
Luego intento conectarme y me pide una contraseña...
Al verificar el servidor, estoy seguro de que no se cargó ninguna clave porque esperaría incluir el archivo "claves_autorizadas":
root@server: ls /home/user/.ssh/
known_hosts
¿Qué estoy haciendo mal?
Respuesta1
El problema es que el cliente ssh lee directamente la contraseña desde la terminal, no desde la entrada estándar.
La forma más sencilla que conozco para solucionar este problema es instalar 'sshpass' y luego usar esto (sin esperar):
sshpass -p "thepassword" ssh-copy-id -i /home/user/.ssh/id_rsa.pub [email protected]
Respuesta2
El siguiente script también debería funcionar
#!/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"; }
}
Debe hacerlo ejecutable y llamarlo de la siguiente manera:
./ssh-copy-id.exp <user> <host> <password>
En tu caso:
./ssh-copy-id.exp root 111.111.111.111 thepassword
Respuesta3
Está copiando la clave en /root/.ssh/authorized_keys
lugar de la cuenta de usuario. Fíjate donde dice:[email protected]'s password:
Respuesta4
!/usr/bin/env bash
fingerprints(){
/usr/bin/expect -c "set timeout 50; spawn ssh-copy-id -i /root/.ssh/id_rsa.pub -p\ <port num>\ root@$<your server>;
expect {
\"assword: \" {
send \<your pwd>\n\"
expect {
\"again.\" { exit 1 }
\"expecting.\" { }
timeout { exit 1 }
}
}
\"(yes/no)? \" {
send \"yes\n\"
expect {
\"assword: \" {
send \"<your pwd>\n\"
expect {
\"again.\" { exit 1 }
\"expecting.\" { }
timeout { exit 1 }
}
}
}
}
}"
}
huellas dactilares