GNU/Linux >> Linux Esercitazione >  >> Linux

Ssh:come eseguire uno script immediatamente dopo la connessione tramite Ssh?

Ho iniziato a fare questa domanda ma ho risposto mentre l'avevo aperta. Pubblicherò questa domanda, seguirò la mia soluzione e la lascerò aperta ad altre potenziali soluzioni.

< retroscena>

Sono un utente di tmux e vim. Mi piace il lavoro di vim remoto perché non devo preoccuparmi che le macchine di sviluppo di Ubuntu si rompano quando un film in flash mi dà il panico del kernel. L'esecuzione di tmux significa che i file aperti mi stanno aspettando dopo il riavvio e posso continuare da dove avevo interrotto. Ho avuto problemi con vim in esecuzione in una sessione tmux quando mi collego in questo modo:

ssh example.com -t 'tmux attach'

Emergono problemi con UTF-8 che non si verificano quando si esegue il bombardamento normalmente e si collega manualmente a una sessione tmux.

< /backstory>

Quindi voglio un metodo riutilizzabile per avviare qualcosa su ssh login, che non influisca su nessuna delle altre cose che ho configurato nel mio .zshrc (o il tuo .bashrc se usi ancora bash) che potrebbe essere richiesto per il mio ambiente di sviluppo, questo non appare quando lavoro occasionalmente localmente su quella stessa macchina.

Risposta accettata:

Quando esegui ssh example.com , il demone ssh avvia una shell di login per te e la shell di login legge il tuo ~/.profile (o ~/.bash_profile o ~/.zprofile o ~/.login a seconda della shell di accesso). Quando specifichi un comando da eseguire in remoto (con o senza -t ), il demone ssh avvia una normale shell, quindi il tuo .profile non viene letto. Rimedio:

ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'

La maggior parte dei demoni ssh è configurata per rifiutare la trasmissione di variabili d'ambiente ad eccezione di LC_* . Se il demone ssh su example.com lo consente, puoi abusare di un LC_* personalizzato variabile per avviare automaticamente tmux:inseriscilo nel tuo ~/.profile :

if [ -n "$LC_tmux_session" ] && tmux has -t "$LC_tmux_session"; then
  exec tmux attach -t "$LC_tmux_session"
elif [ -n "${LC_tmux_session+1}" ] && tmux has; then
  exec tmux attach
fi

quindi accedi con LC_tmux_session= ssh example.com o LC_tmux_session=session_name ssh example.com .

Questa risposta contiene ulteriori informazioni sul passaggio di variabili di ambiente su ssh.


Linux
  1. Come eseguire "find -exec {};?

  2. Come eseguire uno script di shell all'avvio

  3. Esegui lo script bash dopo il login

  4. Come eseguire automaticamente i comandi all'accesso SSH?

  5. Come uscire da SSH di vagabondo nel terminale

Come eseguire uno script Python in PHP

Come eseguire uno script Bash

Come mantenere le sessioni SSH remote in esecuzione dopo la disconnessione

Come eseguire l'SSH sul server tramite Linux

Come eseguire uno script bash tramite percorso assoluto?

Come determinare se ho effettuato l'accesso tramite SSH?