Use una carcasa no instalada en la máquina remota

9

Dado el escenario:

  • Máquina remota : servidor SSH; el usuario no tiene privilegios de administrador;
  • Máquina local : cliente SSH; El usuario tiene privilegios de administrador.

Si el usuario , que inicia sesión en remoto desde local , desea interactuar con remoto utilizando un shell no instalado en remoto , ¿cómo puede el usuario lograr esto solo?

Ejemplo: el usuario usa fish en local y desea también usarlo en remoto , pero remoto solo tiene instalados bash y zsh .

sampablokuper
fuente
1
@mikeserv, gracias. No puedo entender el llamado al voto negativo , que considero objetivamente caprichoso y excluyente. No tengo ningún problema con los cambios en la etiqueta, pero hago caso a que mi pregunta se vuelva a formatear de una manera que reduce la claridad. No uso el chat, así que no puedo discutirlo allí.
sampablokuper
El abuso de negrita es difícil de leer . Y oraciones que faltan muchas palabras.
Gilles 'SO- deja de ser malvado'
2
@sampablokuper has usado negrita para enfatizar hasta el punto que es difícil de leer; Además, te estás acercando cuando todo está enfatizado, nada lo está.
derobert
1
@Gilles, a ninguna de las oraciones de mi pregunta le faltan palabras.
sampablokuper
1
@derobert para clasificación (y, por lo tanto, claridad), al igual que muchos libros de texto informáticos. Hay tres sistemas que interactúan en mi pregunta, y sus nombres (o, si lo prefiere, referencias a ellos) están en negrita. Nada más es negrita. Antes de que alguien pregunte (¡quiero decir, en serio! ¡Ya me están pidiendo que justifique elecciones de formato perfectamente comprensibles!), Sí, uno de los sistemas es humano y los otros dos no lo son. Y Gilles, gracias, pero no, no quise usar el formato de código. Prefiero usar el formato de código solo para comandos o código, ninguno de los cuales está presente en mi pregunta.
sampablokuper

Respuestas:

6

Instale su caparazón favorito en la máquina remota. No necesita ningún privilegio de administrador para hacerlo, puede instalar programas en su directorio personal, es menos conveniente. Consulte Instalación en debian 5 de 32 bits sin ser root , ¿Cómo instalar un programa localmente sin privilegios de sudo? , Seguimiento de programas y otras preguntas .

Si desea iniciar sesión automáticamente en un shell que instaló usted mismo en lugar del predeterminado, consulte Cómo crear un shell predeterminado de zsh sin acceso de root

Si todo lo que quiere hacer es manipular archivos remotos, puede usar SSHFS para montar el árbol de directorios remotos en su máquina local.

mkdir ~/remote.d
sshfs remote.example.com:/ ~/remote.d
ls ~/remote.d/

fusermount -u ~/remote.d

Si no tiene espacio en su directorio de inicio o es una cuenta compartida, puede hacerlo configurando un túnel SSH inverso y montar su árbol de directorio local en la máquina remota con SSHFS , suponiendo que las dos máquinas ejecuten la misma arquitectura ( misma variante de Unix en el mismo tipo de procesador). Si las dos máquinas tienen arquitecturas incompatibles, incluso puede instalar los programas para la arquitectura remota en su directorio de inicio local. Esto puede no ser muy conveniente ya que tendrá que configurar rutas correctamente para que los programas encuentren sus bibliotecas, archivos de configuración y otros archivos de datos.

Eshell de Emacs es compatible con Tramp : si cambia a un directorio remoto en Eshell, ejecutará comandos en la máquina remota.

Gilles 'SO- deja de ser malvado'
fuente
3

Respuesta simple: No, no puede usar en una caja remota un programa que no esté instalado en la caja remota.

Solución alternativa: no necesita privilegios de administrador para instalar un shell en el sistema remoto. Puede instalarlo en su directorio de inicio, pero probablemente tenga que compilarlo desde las fuentes. Normalmente usando algo comoconfigure --prefix=${HOME}/local

Última nota: no puede cambiar su shell predeterminado a uno no "oficial" (ver /etc/shells) pero puede poner algo como exec fishen su.bashrc

coco
fuente
2

El usuario puede usar sshfs para montar su $ HOME remoto en su máquina local. En tal escenario, el usuario no usaría su caparazón de elección en la máquina remota directamente, pero aún así, mejor que nada.

Arkadiusz Drabczyk
fuente
2

El enfoque básico es copiar el ejecutable de shell en el host remoto usando y scpluego ejecutarlo usando ssh, por ejemplo

scp /usr/bin/fish remote:fish && ssh -t remote '~/fish'

Se -tnecesita para que sshasigne un tty, lo que no haría de forma predeterminada al ejecutar un comando remoto.

Esto supone que su host remoto está ejecutando el mismo sistema operativo. De lo contrario, querrás descubrir el sistema operativo remoto y compilar un binario (posiblemente estático) que puedas copiar.

Mikel
fuente
2

La respuesta obvia, "instalar el comando en la máquina remota", es la solución más limpia, por lo que no debemos ignorarla:

Si es posible instalar el comando como root, por ejemplo con
sudo apt-get install fish,
el comando se puede ejecutar así:

ssh remote -t fish


La pregunta es qué hacer cuando no podemos instalar un comando en la computadora remota.
O más específicamente, se trata del caso de que no podamos instalar un comando como root .
¡Eso no significa que no podamos instalar nada!

Lo que aún es posible es instalar el comando dentro del directorio de inicio construyéndolo desde la fuente .

Esto tiene la ventaja de que se encarga de todos los archivos de soporte asociados que pueden venir con un comando y de cómo los encuentra el programa. En el fishejemplo de shell, estas son las funciones de finalización, etc., todas no están disponibles si solo copiamos el fishbinario.

La creación de un comando desde la fuente necesita herramientas de desarrollo y archivos de desarrollo de las bibliotecas utilizadas, lo que puede ser demasiado complicado.

Pero muchos programas vienen con todo lo que necesitan agrupados en las fuentes, por lo que puede ser fácil. Difícil de decir antes, pero uno puede intentarlo.

Para instalar un comando en el directorio de inicio, configurese proporciona la ruta para instalar , que debe verificarse en las instrucciones de compilación. P.ej:

mkdir ~/local
./configure --prefix=~/local 
make
make install

Tenga en cuenta que no es sudo make installtan habitual, ya que es el objetivo de instalarlo localmente para no necesitar sudo aquí.

Para obtener información general sobre la instalación de programas desde la fuente, consulte askubuntu.SE: ¿Cómo instalo un archivo .tar.gz (o .tar.bz2)?

Volker Siegel
fuente
0

No creo que pueda ejecutar un shell que está en una máquina en otra. La única forma de ejecutarlo en la máquina remota es instalarlo.

env_explosion
fuente