
Deseo crear el siguiente script en .profile, para que cada sesión SSH vaya directamente a su lugar:
- Verifique el host especificado (usuario@host).
- Si host = host1 -- cd /var/www/sitio1
etc.
¡Ayuda! :)
Respuesta1
Estoy bastante seguro de que SSH no envía el nombre de host al servidor (solo lo usa localmente para buscar una dirección IP y verificar claves, etc.). Al menos, no de una manera que pueda usarse en un script de shell.
Vea el resultado de env
: el único nombre de host es el canónico, independientemente del nombre que se usó en el comando ssh.
Algunos clientes SSH y algunos servidores SSH permiten al cliente especificar un valor para una o más variables de entorno; posiblemente podría usar esto para indicarle al servidor a qué directorio cambiar. Por ejemplo, vea masilla.configuración, conexión, datoso OpenSSHEnviarEnvopción.
De lo contrario, tiene un ID de usuario para cada sitio web con un nombre de dominio diferente o debe ofrecer al usuario un menú.
Respuesta2
Su pregunta no está clara: ¿está llegando al mismo host a través de varios alias? ¿Está llegando a diferentes hosts que comparten un .profile
? ¿Está intentando ejecutar comandos basados en el nombre del host de origen o en los nombres del host de destino?
Si desea diferentes efectos en diferentes hosts remotos, simplemente pruebe el nombre del host remoto:
case "$(hostname)" in
host1) cd /var/www/site1;;
esac
Si desea diferentes efectos en el mismo host, puede utilizar las SendEnv
directivas en su~/.ssh/config
para enviar variables de entorno (asumiendo que estás usando elAbiertoSSHcliente). Estos deben estar habilitados con unAcceptEnv
directiva en el lado del servidor, lo que a menudo no es el caso. Sin embargo, LC_*
normalmente se permiten variables, por lo que puede pasar información utilizándolas. En el lado del cliente, ejecute LC_VIRTUAL_HOST=site1 ssh common-host.provider.com
. En tu .profile
servidor, escribe
case "$LC_VIRTUAL_HOST" in
host1) cd /var/www/site1;;
esac