Utilizzare una shell non installata sul computer remoto


9

Dato lo scenario:

  • Macchina remota : server SSH; l'utente non ha i privilegi di amministratore;
  • Macchina locale : client SSH; l'utente ha i privilegi di amministratore.

Se utente , accedendo al remoto dal locale , desidera per interagire con remoto utilizzando un guscio non installato in remoto , come può utente compiere questa sola?

Esempio: l' utente utilizza il pesce in locale e desidera utilizzarlo anche in remoto , ma in remoto sono installati solo bash e zsh .


1
@mikeserv, grazie. Non riesco a capire la chiamata al downvote, che considero discutibilmente ritmica ed esclusionista. Non ho alcun problema con le modifiche ai tag, ma faccio eccezione alla mia riformattazione della domanda in modo da ridurre la chiarezza. Non uso la chat, quindi non posso discuterne lì.
sampablokuper,

l'abuso di grassetto è difficile da leggere . E le frasi mancano di molte parole.
Gilles 'SO- smetti di essere malvagio' il

2
@sampablokuper hai usato il grassetto per enfatizzare il punto che è difficile da leggere; inoltre, ti stai avvicinando quando tutto è enfatizzato, niente lo è.
derobert,

1
@Gilles, nessuna delle frasi nella mia domanda è neanche una parola mancante.
sampablokuper,

1
@derobert per la classificazione (e quindi la chiarezza), proprio come fanno molti libri di testo informatici. Ci sono tre sistemi che interagiscono nella mia domanda e i loro nomi (o, se preferisci, riferimenti a loro) sono in grassetto. Nient'altro è grassetto. Prima che qualcuno chieda (voglio dire, davvero! Mi è già stato chiesto di giustificare scelte di formattazione perfettamente comprensibili!), Sì, uno dei sistemi è umano e gli altri due non umani. E Gilles, grazie, ma no, non intendevo usare la formattazione del codice. Preferisco usare la formattazione del codice solo per comandi o codice, nessuno dei quali è presente nella mia domanda.
sampablokuper,

Risposte:


6

Installa la tua shell preferita sul computer remoto. Non hai bisogno di alcun privilegio di amministratore per farlo, puoi installare programmi nella tua home directory, è solo meno conveniente. Vedi Installazione su debian 5 a 32 bit senza essere root , Come installare il programma localmente senza i privilegi di sudo? , Tenere traccia dei programmi e di altre domande .

Se si desidera accedere automaticamente a una shell installata dall'utente anziché a quella predefinita, consultare Creazione della shell predefinita zsh senza accesso root

Se tutto ciò che vuoi fare è manipolare i file remoti, puoi usare SSHFS per montare l'albero di directory remoto sul tuo computer locale.

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

fusermount -u ~/remote.d

Se non hai spazio nella tua home directory o è un account condiviso, puoi accontentarti di impostare un tunnel SSH inverso e montare la tua struttura di directory locale sul computer remoto con SSHFS , supponendo che i due computer eseguano la stessa architettura ( stessa variante unix sullo stesso tipo di processore). Se le due macchine hanno architetture incompatibili, è anche possibile installare i programmi per l'architettura remota nella home directory locale. Questo potrebbe non essere molto conveniente in quanto dovrai impostare correttamente i percorsi affinché i programmi possano trovare le loro librerie, i file di configurazione e altri file di dati.

L' eshell di Emacs è compatibile con Tramp : se si passa a una directory remota in Eshell, si eseguiranno i comandi sul computer remoto.


3

Risposta semplice: No, non è possibile utilizzare su un box remoto un programma che non è installato sul box remoto.

Soluzione alternativa: non è necessario disporre dei privilegi di amministratore per installare una shell sul sistema remoto. Puoi installarlo nella tua home directory ma probabilmente devi compilarlo dai sorgenti. Tipicamente usando qualcosa di simileconfigure --prefix=${HOME}/local

Ultima nota: non puoi cambiare la tua shell di default con una non "ufficiale" (vedi /etc/shells) ma puoi mettere qualcosa di simile exec fishnel tuo.bashrc


2

L'utente può usare sshfs per montare il suo $ HOME remoto sul suo computer locale. In tale scenario, l' utente non userebbe direttamente la sua shell preferita sulla macchina remota ma, comunque, meglio di niente.


2

L'approccio di base è copiare l'eseguibile della shell sull'host remoto usando scpquindi eseguirlo usando ssh, ad es

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

Il -tè necessaria affinché sshalloca un tty, che non farebbe per impostazione predefinita quando si esegue un comando remoto.

Ciò presuppone che l'host remoto stia eseguendo lo stesso sistema operativo. Altrimenti, vorrai capire il sistema operativo remoto e compilare un binario (possibilmente statico) che puoi copiare.


2

La risposta ovvia, "installa il comando sul computer remoto", è la soluzione più pulita, quindi non dovremmo ignorarla:

Se è possibile installare il comando come root, ad esempio con
sudo apt-get install fish,
il comando può essere eseguito in questo modo:

ssh remote -t fish


La domanda è su cosa fare quando non è possibile installare un comando sul computer remoto.
O più specifico, si tratta del caso in cui non possiamo installare un comando come root .
Ciò non significa che non possiamo installarlo affatto!

Ciò che è ancora possibile è installare il comando all'interno della home directory costruendolo dal sorgente .

Questo ha il vantaggio di occuparsi di tutti i file di supporto associati che possono venire con un comando e di come li trova il programma. Nell'esempio della fishshell, queste sono le funzioni di completamento ecc., Tutte non disponibili se si copia semplicemente il file fishbinario.

La creazione di un comando dall'origine richiede strumenti di sviluppo e file di sviluppo delle librerie utilizzate, il che potrebbe essere troppo complicato.

Ma molti programmi sono dotati di tutto ciò di cui hanno bisogno raggruppati nelle fonti, quindi potrebbe essere facile. Difficile dirlo prima, ma si può solo provare.

Per installare un comando nella home directory, configureviene fornito il percorso per l'installazione - che deve essere verificato nelle istruzioni di compilazione. Per esempio:

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

Nota che non è sudo make installcome al solito - in quanto è il punto di installarlo localmente per non aver bisogno di sudo qui.

Per informazioni generali sull'installazione di programmi dalla sorgente, vedere askubuntu.SE: come posso installare un file .tar.gz (o .tar.bz2)?


0

Non penso che tu possa eseguire una shell che si trova su una macchina su un'altra. L'unico modo per eseguirlo sul computer remoto è installarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.