¿Alias ​​autocompletable (o similar) en bash?

2

Tengo un host CentOS en mi red local que uso a diario para abrir conexiones SSH a muchos (más de 40) otros hosts en Internet y en la red local. He configurado pares de claves RSA para omitir la autenticación interactiva y algunos scripts de bash como este:

[root@beta ~]# cat ~/connections/mywebsite.sh
ssh mywebsitefi@virtualserver123.hostingprovider.fi

Esto funciona bien cuando necesito abrir conexiones a ellos, pero no cuando necesito scparchivos al mismo host.

¿Es posible crear algo equivalente a un alias para reemplazar la parte del nombre de usuario @ host como esta?

[root@beta ~]# scp myfile MYWEBSITE:/var/www

La posibilidad de completar automáticamente el alias con la tecla de tabulación también sería increíble.

Entiendo que los alias bash solo se pueden usar como la primera palabra del comando, pero ¿hay alguna otra manera de lograr esto? Si no está en bash, ¿quizás otro caparazón?

Kaivosukeltaja
fuente

Respuestas:

7

use las capacidades integradas en ssh, scp y rsync.

En su subdirectorio .ssh, cree un archivo 'config'. (chmod 0600)

Dentro de esto, puede describir hosts y opciones que se utilizarán para hosts particulares (u opciones globales).

Usando su ejemplo de: [email protected]

Introduzca la siguiente:

Host MYWEBSITE
  Hostname virtualserver123.hostingprovider.fi
  User mywebsitefi
  Port 22

a partir de este momento, si usa 'MYWEBSITE' como nombre de host, proporcionará automáticamente el nombre de host real, nombre de usuario, puerto, opciones, lo que especifique. (Especifico el número de puerto por hábito)

Lo uso yo mismo para especificar números de puerto no estándar para mis servidores ssh con conexión a internet /

Puedes escribir:

ssh MYWEBSITE

y las entradas en el archivo .ssh / config completarán la url, el nombre de usuario, el puerto y las opciones.

scp MYWEBSITE:/somepath/somefile /home/me/
rsync -vzP /some/files MYWEBSITE:/my/home/

trabaje como usted esperaría también.

Si especifica varios nombres en la línea Host, puede llamarlo por cualquiera de esos nombres, todos iguales.

la sangría y la capitalización son irrelevantes, pero me gusta dividirlo así para mayor claridad. coloque tantas entradas como necesite en su .ssh / config

.ssh / config debe tener permisos de 0600 (usuario rw, ninguno para todos los demás), de lo contrario, ssh se quejará e ignorará el archivo.

Por supuesto, hay más información disponible en las páginas de comando man ssh (1) y ssh_config (5).

Cualquier cosa colocada antes de la primera línea 'Host' se considera una opción global y se aplica a todas las entradas que defina. Útil para especificar tiempos de espera de conexión, reenvío X11 y otros.

lornix
fuente
¡Gracias, esta y la respuesta de @eldering combinadas son exactamente lo que estaba buscando!
Kaivosukeltaja
3

Si instala el paquete bash-complete, eso agregará el autocompletado de nombres de host y alias ssh en función de la información que se puede encontrar en varios lugares como .ssh / config, hosts conocidos, etc.

Jaap Eldering
fuente
0

Si entiendo su pregunta, una función de shell será suficiente: suponiendo que desea codificar al usuario, host y ruta:

myscp () {
  scp "$@" user@host:path
}

usar como

myscp *.html *.css
Glenn Jackman
fuente