Git en el puerto SSH personalizado

149

Mi proveedor de VPS recomienda que deje mi puerto SSH con el número de puerto personalizado que le asignan de manera predeterminada (no 22). La cuestión es que, aunque sé que puedo dar el número de puerto al crear una configuración remota, parece que no puedo hacer lo mismo al hacer un clon de git. Estoy usando gitolite, así que los comandos de clonación se ven así:

git clone [email protected]:gitolite-admin

¿Hay alguna forma de convertir esto en usar el número de puerto ssh personalizado?

También debo mencionar que estoy ejecutando cygwin en Windows. He visto varios lugares que dicen agregar el puerto personalizado al ~/.ssh/configarchivo como

Host mydomain.com
    Port 12345

sin embargo, en cygwin, ese archivo no parece existir.

ryanzec
fuente
8
El nombre de ruta del archivo está .ssh/config(no conf) en el directorio de inicio de su usuario. No es necesario para la operación básica y, por lo tanto, no existe de manera predeterminada. Tendrás que crearlo. Intente vim ~/.ssh/config(o use su editor de texto instalado preferido) para abrirlo / crearlo.
Chris Johnsen el
En Windows para leer /Users/USERX/.ssh/config, debe configurar su HOMEentorno local /Users/USERX.
kenorb

Respuestas:

328
git clone ssh://[email protected]:[port]/gitolite-admin

Tenga en cuenta que el número de puerto debe estar allí sin los corchetes: []

Christo
fuente
Esto funciona, sin embargo, la corrección de Chris Johnsen permite una URL limpia cuando se usan números de puerto personalizados
ryanzec
66
:-) Si me preguntas, la sintaxis de la URL de git no está limpia, y lo anterior está más normalizado
Christo
Admito que la sintaxis que proporcionó es más descriptiva, pero tener que recordar agregar el número de puerto personalizado es molesto. Configurar ese número de puerto y luego no tener que recordar que es un poco más fácil pero para cada uno lo suyo (es por eso que se puede hacer en ambos sentidos) :)
ryanzec
48
Tenga en cuenta que no funcionará si elimina el protocolo. es decir, si intenta lo siguiente, no funcionará. git clone [email protected]:[port]/gitolite-admin
Bijay Rungta
1
en Windows con plink, la sintaxis de trabajo parece sergit clone ssh://[email protected]:port/home/user/gitolite-admin
Roman Plášil
18

Las respuestas anteriores son agradables y geniales, pero no están claras para los nuevos usuarios de git como yo. Entonces, después de una investigación, ofrezco esta nueva respuesta.

1 ¿Cuál es el problema con la forma del archivo de configuración ssh?

Cuando el archivo de configuración no existe, puede crear uno. Además portdel archivo de configuración puede incluir otra opción de configuración ssh: user IdentityFiley así sucesivamente, el archivo de configuración se ve así

Host mydomain.com
    User git
    Port 12345

Si está ejecutando Linux, tenga cuidado de que el archivo de configuración debe tener un permiso estricto: lectura / escritura para el usuario y que otros no puedan acceder

2 ¿qué pasa con la forma de url ssh?

Es genial, lo único que deberíamos saber es que hay dos sintaxis para ssh url en git

  • sintaxis estándar ssh://[user@]host.xz[:port]/path/to/repo.git/
  • scp como sintaxis [user@]host.xz:path/to/repo.git/

De forma predeterminada, Gitlab y Github mostrarán la url de sintaxis como scp , y no podemos proporcionar el puerto ssh personalizado. Entonces, para cambiar el puerto ssh, necesitamos usar la sintaxis estándar

Jim Green
fuente
14

Cuando desee una ruta relativa desde su directorio de inicio (en cualquier UNIX), use esta extraña sintaxis:

ssh://[user@]host.xz[:port]/~[user]/path/to/repo

Por ejemplo, si el repositorio está en /home/jack/projects/jillweben el servidor jill.comy está iniciando una sesión como jackla sshdescucha en el puerto 4242:

ssh://[email protected]:4242/~/projects/jillweb

Y al iniciar sesión como jill(suponiendo que tenga permisos de archivo):

ssh://[email protected]:4242/~jack/projects/jillweb

Daniel Santos
fuente
hombre, esto había quedado perplejo por un tiempo y era exactamente lo que necesitaba saber. ¿Sabes dónde se documenta esto?
Shaun Wilson el
@Shaun Wilson Lo siento, no recuerdo muy bien. Pero me tomó un tiempo encontrar la respuesta, así que pensé que debería compartirla aquí, ya que este era uno de mis callejones sin salida.
Daniel Santos
1
¡Gracias! Especialmente si está en un plan de alojamiento compartido, la parte ~ [usuario] es importante. Esto me ayudó a clonar mi repositorio.
Jim Wilson el
2
@ShaunWilson, la especificación de ruta es una ruta UNIX estándar. Si ha iniciado sesión en un sistema UNIX, ~ es una abreviatura del directorio de inicio, es útil tanto para guardar una gran cantidad de tipeo como porque el directorio de inicio puede estar ubicado en lugares no estándar. Lo anterior podría no funcionar en un servidor Windows.
Samuel Åslund
@Samuel Åslund Gracias, he actualizado mi respuesta. A menudo me olvido de Windows porque, bueno, no quiero ser hortera, pero en comparación es horrible. Sin embargo, esta es una distinción importante.
Daniel Santos
9

(Actualización: unos años más tarde, Google y Qwant "aerolíneas" todavía me envían aquí cuando busco "puerto ssh no predeterminado de git") Una forma probablemente mejor en las nuevas versiones de git es usar el GIT_SSH_COMMAND ENV.VAR como:

GIT_SSH_COMMAND="ssh -oPort=1234 -i ~/.ssh/myPrivate_rsa.key" \ git clone myuser@myGitRemoteServer:/my/remote/git_repo/path

Esto tiene la ventaja adicional de permitir cualquier otra opción adecuada para ssh (puerto, priv.key, IPv6, dispositivo PKCS # 11, ...).

Earizon
fuente