56 votos

¿Existe un equivalente a ssh-copy-id para Windows?

¿Hay algún equivalente o puerto de ssh-copy-id disponible para Windows? Es decir, ¿hay una manera fácil de transferir claves SSH desde una máquina local a un servidor remoto en Windows?

En caso de que ayude, estoy usando Pageant y Kitty (una alternativa a la masilla).

27voto

Zoredache Puntos 84524

ssh-copy-id es un script</strkeep><strkeep> bastante simple que debería ser bastante fácil de replicar en Windows.

Si ignoras todo el manejo de parámetros, el manejo de errores y demás, estos son los dos comandos de ssh-copy-id que realmente hacen el trabajo la mayor parte del tiempo.

GET_ID="cat ${ID_FILE}"
{ eval "$GET_ID" ; } | ssh ${1%:} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1

Usando las herramientas de Putty un comando como este debería ser equivalente (no probado).

type  public_id | plink.exe username@hostname "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"

Si quieres hacer todo el mismo manejo de errores, y la localización automática de claves, estoy seguro que escribir un script bajo Windows será mucho más complicado, pero ciertamente posible.

1 votos

Gracias. Al principio no conseguí que funcionara; me devolvían los errores de "acceso denegado", pero plink no dejaba de permitirme introducir la contraseña. Entonces intenté pasarle a plink la contraseña usando el parámetro -pw y eso funcionó. ¿Sabe usted si hay una manera de conseguir que plink se detenga para que usted introduzca la contraseña a mitad de camino?

0 votos

No estoy muy seguro de la autenticación de la contraseña y el plink. Cada vez que lo utilizo ya tengo mi clave en el sistema, y tengo la paginación en marcha.

4 votos

plink.exe -pw password obras. Además, si sabes que el archivo .ssh/authorized_keys existe, el comando es simplemente type id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"

20voto

Augie Gardner Puntos 141

Estas respuestas no me ayudaron. Realmente no necesitaba ninguna locura de scripts. Había creado una clave pública en mi máquina cliente en git bash y estaba tratando de copiarla a un VPS.

Después de crear tu clave pública, la clave debe almacenarse como "(la carpeta en la que hayas empezado)/.ssh/id_rsa.pub"

Así que usa este comando:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys" donde user es su nombre de usuario (a veces "root", o lo que haya configurado), y sustituya 123.45.67.89 con la dirección IP de su máquina / host / VPS.

Si el directorio .ssh aún no se ha creado en la máquina anfitriona, utilice esta pequeña variación:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

2 votos

¡Ojalá tuviera más votos! por la frase única.

16voto

Kenny Rasschaert Puntos 5933

ssh-copy-id hace un par de cosas (leer el página de manual para más detalles), pero lo más importante que hace es añadir el contenido de su archivo de clave pública local a un archivo remoto llamado authorized_keys.

  • Puedes hacerlo tú mismo abriendo el archivo de claves con un editor de texto y pegando el contenido en el terminal de Kitty.
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • Como alternativa, puede cargar el archivo utilizando WinSCP (que utiliza sftp, o scp como alternativa) y hacer algo similar a mi sugerencia anterior, sin el feo copiar/pegar.
    cat id_rsa.pub >> .ssh/authorized_keys
    donde id_rsa.pub es el nombre del archivo de la clave pública que has subido.

5voto

Vijay Puntos 182

Inspirado por la respuesta de zoredache, he creado un montón de scripts que son la versión de Windows. Sin embargo todos dependen de plink. Por favor, echa un vistazo aquí

https://github.com/VijayS1/scripts/blob/master/ssh-copy-id/

También tengo un winscp script que se puede utilizar según otra respuesta. :) Extracto del readme:

Métodos intentados hasta ahora:

  • DOS(.cmd) - Éxito
    • usage: .\Scriptname test@example.com password [identity file]
  • VBS (.vbs) - Éxito
    • usage: .\Scriptname /i:idtest.pub user@example.com /p:password
  • Powershell(.ps1) - Éxito
    • usage: .\Scriptname -i idtest.pub user@example.com password
  • mremoteNG (app ext) - Éxito
    • Seleccione Host, haga clic con el botón derecho, herramientas externas, seleccione Scriptname
  • WinSCP script (.bat) - Éxito
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"

1 votos

Estos son bastante dulces

0voto

ceilfors Puntos 111

Si está utilizando cmder (o msysgit/mingw que tiene scp & ssh), acabo de escribir un simple Python script para esto. Se puede encontrar aquí: https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983

Ejemplo de uso: Python ssh-copy-id.py user@remote-machine.

La contraseña se solicitará al ejecutar el script.

0 votos

¿por qué es necesario el cmder?

0 votos

@user57411 No requiere cmder, requiere comandos scp y ssh.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X