2012-05-10 3 views
6

Posso eseguire tmux localmente e collegarmi tramite ssh alla macchina remota .. e dopo ogni nuovo pannello e/o schermo per essere con la shell della macchina remota ... Cosa I ' Sto dicendo che non posso installare tmux sulla macchina remota, ma non voglio fare una connessione ssh da ogni pannello, ma ssh-login solo una volta.Can tmux pannello connessione ssh remota

è tale cosa possibile .. grazie

+0

si può installare tmux nella propria home directory su la macchina remota? Senza tmux, ssh ti fornisce solo un singolo terminale. – chepner

+0

Questo è il problema Non riesco a installare nulla sulla macchina remota .. politica – user1019129

risposta

3

Non credo tmux lattina. Una soluzione alternativa sarebbe aggiungere qualcosa di simile a tmux.conf.

bind-key X new-window "ssh HOST" 

Quindi le nuove finestre dovrebbero essere avviate dall'host remoto.

+0

hmm .. apre una nuova finestra .. C'è un modo per eseguire semplicemente il comando senza creare una nuova finestra, ma rimanere nel riquadro Ho eseguito il comando bind-key. run-shell non lo fa neanche. – user1019129

+1

non sono sicuro di aver capito la tua domanda, ma ha 'chiave di invio X tasto bind" ssh HOST \ n "' fai quello che vuoi? – Thor

+1

sorta di sì ... :) grazie. Btw: non ha eseguito "\ n" .... Ho scoperto che è C-m invece di \ n – user1019129

5

Se si desidera effettuare il login solo una volta, è possibile utilizzare la funzione ControlMaster di ssh. Aggiungete un po 'di configurazione come this al ~/.ssh/config:

ControlMaster auto 
ControlPath /tmp/ssh_mux_%h_%p_%r 

Se si effettua il login allo stesso server (come lo stesso utente) più volte (sia in una tmux o no), SSH riutilizzare la connessione in modo che don' t necessario effettuare la connessione e accedere di nuovo.

4

lilydjwg ha spiegato qualcosa che non ho mai capito prima. Conoscere le impostazioni di ControlMaster rende molto più ragionevole quanto segue, in quanto semplifica la creazione di più connessioni ssh. È necessario autenticarsi solo una volta e l'host remoto non deve avere un processo sshd in esecuzione per ciascuna connessione.

Nel file .tmux.conf:

# What host do you usually log in to? 
# We'll ssh there by default each time a new window or pane is opened. 
REMOTE_HOST=your.usual.host 
set-option -g default-command "ssh $REMOTE_HOST" 

# Simple interface to change which host is connected to when you create 
# a new window or pane. 
bind-key C-h command-prompt -p "Set remote host: " -I $REMOTE_HOST "set-option default-command 'ssh %%'" 

# In case you really do want a new window with a local shell. 
bind-key C new-window "" 
0

Sto usando tmux 1.8 e non ho trovato una soluzione integrata. Queste soluzioni si adattano almeno per i miei casi di utilizzo comuni:

  • Cattura l'intero contenuto riquadro e la ricerca per l'ultimo comando ssh in esso (io uso la conoscenza circa la fine della mia pronta a rilevare il comando più o meno affidabile)
  • Se ciò non riesce a verificare il comando riquadro potrebbe essere stato creato con utilizzando l'opzione di shell-command tmux new-window o split-window comandi

il mio script reconnect.sh simile a questa. La cosa più sporca è il modo per ottenere l'ultimo comando ssh dal buffer. Fino ad ora "> ssh" era sufficiente per le mie situazioni per rilevare in modo affidabile una linea contenente una richiesta di connessione ssh, ma qualsiasi soluzione migliore sarebbe apprezzata.

#!/bin/bash 

# @TODO: change this according to your own prompt 
# This is used to find lines connect ssh command in the pane buffer 
PROMPT_SEPARATOR="> " 

# get current pane buffer size and dimensions 
HISTORY_LIMIT=`tmux display-message -p "#{history_limit}"` 
VISIBLE_LINES=`tmux display-message -p "#{pane_height}"` 

# search last ssh command in pane content 
LINE=`tmux capture-pane -p -J -S -$HISTORY_LIMIT -E $VISIBLE_LINES | grep "${PROMPT_SEPARATOR}ssh " | tail -1` 
if [ -n "$LINE" ]; then 
    echo $LINE | sed "s/.*$PROMPT_SEPARATOR//;" 
else 
    # fall back to the command that might have been used to create the pane 
    # (not necessarily ssh but helpful anyway) 
    tmux list-panes -F "#{pane_active} #{pane_start_command}" | grep "^1 " | tail -1 | cut -d ' ' -f2- 
fi 

ho salvato questo script nella mia directory ~/.tmux e cambiato combinazioni di tasti per varie split-window e new-window scorciatoie nel mio .tmux.conf simile a questo:

# try to reconnect to remote host when creating new window 
bind c run-shell 'CMD=`~/.tmux/reconnect.sh`; tmux new-window "$CMD"'