¿Es posible ejecutar ssh-copy-id en un puerto que no sea el 22?

99

Tengo un servidor con SSH ejecutándose en un puerto no estándar. En lugar de 22, se ejecuta en 8129. Para iniciar sesión, uso:

ssh -p 8129 hostname

Ahora, cada vez que necesito configurar una clave para iniciar sesión sin contraseña, tengo que copiar la clave pública y agregarla a autorizado_keys manualmente. Descubrí que el comando ssh-copy-idpodría usarse para simplificar este proceso, pero parece que no tiene una opción para especificar el puerto del servidor ssh.

¿Hay alguna forma de decirle ssh-copy-idque use el puerto 8129, o debería olvidarme de este comando y copiar / pegar manualmente como antes?

Milan Babuškov
fuente

Respuestas:

112
$ ssh-copy-id "-p 8129 user@host"

Fuente: http://it-ride.blogspot.com/2009/11/use-ssh-copy-id-on-different-port.html

NOTA: El puerto debe estar frente al usuario @ host o no se resolverá

Jsan
fuente
11
Es realmente estúpido, sshtiene sintaxis ssh -p 1234 user@host, ssh-copy-id "-p 1234 user@host"y finalmente scp -P 1234 user@host. Sería muy bueno tener la misma sintaxis.
Tombart
2
@Tombart y luego rsync tiene rsync -e "ssh -p 1234" user@host. Juro que es más complicado de lo que vale la pena usar un puerto personalizado.
garetmckinley
1
La respuesta de @Colt McCormack explica que esto se ha mejorado en las nuevas versiones y que esta peculiar sintaxis ya no es necesaria.
Meshy
1
Para su información, el comando completo requiere que la IP se escriba dos veces, y debería verse así:ssh-copy-id "[email protected] -p 12345" -i ~/.ssh/id_rsa.pub 192.168.0.100
degenerar el
1
En macOS (estoy en High Sierra) no se requieren las comillas. es decir. ssh-copy-id -p 8129 user@hosttrabajos.
Arjun Mehta
46

ssh-copy-idno toma ningún argumento que pueda pasar al sshcomando subyacente , pero puede configurar un alias en ~/.ssh/config.

Host myhost
HostName hostname
Port 8129

Entonces corre ssh-copy-id myhost.

Gilles
fuente
3
Esto también tiene el beneficio de eliminar la necesidad de la -pbandera en los sshintentos regulares . Por lo tanto, no es solo la respuesta correcta a esta pregunta, es lo correcto, punto.
Warren Young
Gracias por esto. La segunda línea "HostName hostname" no es necesaria si está satisfecho con el nombre de host natural del host.
Lonniebiz
17

A partir de openssh-client_6.2 ahora hay un indicador de puerto dedicado para el comando que permite esta sintaxis:

ssh-copy-id -p 8129 user@example

También agregó soporte para agregar otras opciones de ssh con el indicador -o.

Aquí está la página de manual de Ubuntu para la versión apropiada, presentada en 13.04: http://manpages.ubuntu.com/manpages/saucy/man1/ssh-copy-id.1.html

Colt McCormack
fuente
3
Este es el único método que funcionó para el.
Luca Steeb
11

Un vistazo rápido a la fuente indica que ssh-copy-idparece no tener ninguna función que lo permita. Sin embargo, podría hacer algo como lo siguiente:

ssh -p8129 user@host 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_*.pub
Chris Down
fuente
6

Esto funciona (desde aquí ):

ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 221 username@host'
DJR
fuente
5

Siempre lo he scpcopiado:

scp -P 8129 ~/.ssh/id_*.pub user@host:
ssh -p 8129 user@host 'cat id_*.pub >> ~/.ssh/authorized_keys'

Aunque debo decir, probablemente usaré los otros métodos (una línea / conexión) si los recuerdo en el futuro. Pero esta es otra opción para ti.

Kevin
fuente
2

En CentOS7 es solo:

 ssh-copy-id "-p 1234" user@host

Tenga cuidado de no colocar user @ host dentro de las comillas o obtendrá el siguiente error en esta distribución:

/usr/bin/ssh-copy-id: ERROR: Bad port ' 1234 user@host'
Max Cuttins
fuente
0

Con mi macOS, esto funcionó.

ssh-copy-id -i ~/.ssh/id_rsa.pub -p <port> user@host
Jin Kwon
fuente
0

Yo uso este comando:

ssh-copy-id ssh://user@ip_addr:port

Ejemplo:

ssh-copy-id ssh://[email protected]:23

Carlos
fuente