Esto es lo que he intentado y recibí un error:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Esto es lo que he intentado y recibí un error:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Respuestas:
OpenSSH viene con un comando para hacer esto ssh-copy-id,. Simplemente le da la dirección remota y agrega su clave pública al authorized_keysarchivo en la máquina remota:
$ ssh-copy-id tim@just.some.other.server
Es posible que necesite usar la -ibandera para ubicar su clave pública en su máquina local:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>es manejado por su shell, y está ejecutando el comando a través de SSH en lugar de hacerlo a través de un shell. Su solución de hacer que SSH ejecute un shell, que luego ejecuta su comando, debería funcionar
ssh-copy-idno funcionará, ¿verdad?
Siempre puedes hacer algo como esto:
scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
No estoy seguro si puede catdesde una máquina local a una sesión ssh. Simplemente muévalo a / tmp como se sugiere.
Editar: Esto es exactamente lo que ssh-copy-idhace. Justo como dijo Michael.
cato de otra manera). Lo que estás describiendo es la forma anticuada; ssh-copy-idse recomienda porque hay menos riesgo de errores tipográficos o de otorgar permisos incorrectos a los archivos.
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'.
Esta respuesta describe cómo hacer que funcione la forma prevista que se muestra en la pregunta.
Puede ejecutar un shell en la computadora remota para interpretar el significado especial del >>operador de redirección:
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
El operador de redirección >>normalmente es interpretado por un shell.
Cuando ejecuta ssh host 'command >> file', no se garantiza que command >> filesea interpretado por un shell. En su caso, command >> filese ejecuta en lugar del shell sin una interpretación especial y >>se le dio al comando como argumento, de la misma manera que se ejecuta command '>>' fileen un shell.
Algunas versiones de SSH (OpenSSH_5.9) invocarán automáticamente el shell en el servidor remoto y le pasarán los comandos cuando detecten tokens para ser interpretados por un shell como ; > >>etc.
opensshno proporcionar ssh-copy-id. La secuencia sería:
Genera una clave decente de 4k
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
Inicie su agente ssh y absorba información como SSH_AGENT_PID, etc.
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
Ahora comience a cargar claves en su agente SSH
ssh-add ~/.ssh/id_rsa4k
Comprueba que está cargado
ssh-add -l
ssh-add -L
Esto le mostrará lo que tiene en el agente ssh
Ahora realmente SSH a un sistema remoto
ssh username@remotehost.network
Ahora puede ejecutar ssh-copy-id sin argumentos:
ssh-copy-id
Esto crea ~/.ssh/authorized_keysy completa la información básica requerida de ssh-agent.
Tuve problemas con ssh-copy-id al elegir otro puerto que no sea 22 ... así que aquí está mi línea con un puerto ssh diferente (por ejemplo, 7572):
ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
De hecho, el the ssh-copy-idcomando hace exactamente esto (desde el openssh-clientpaquete):
ssh-copy-id user@host
Nota: hostsignifica dirección IP o dominio .
Me gustaría también agregar información adicional a esto
1) Podemos especificar un puerto diferente para SSH en el servidor de destino:
ssh-copy-id "-p 8127 user@host"
Nota:
El puerto debe estar frente al user@hosto no se resolverá.
2) Podemos especificar un archivo con una clave pública :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Nota:
La -iopción nos permite indicar la ubicación apropiada del nombre con el archivo que contiene la clave pública.
A veces puede ser útil, especialmente si lo almacenamos en una ubicación no estándar o si tenemos más de una clave pública en nuestra computadora y queremos señalar una específica.