Timeout della chiave ssh-agent con schermo o tmux sull'host bastion


8

Normalmente ho ssh-agent in esecuzione, ho ssh sul mio host bastion quindi apro una sessione di tmux e mi connetto ad altre caselle tramite quello. Il key forwarding funziona per tutte le sessioni che apro da quel momento in avanti.

Se riprendo la mia sessione tmux dopo aver chiuso il terminale, dormendo il mio laptop, qualunque cosa, il mio inoltro chiave sulle mie sessioni bastione funziona ancora, così come l'inoltro su tutte le nuove sessioni. Quelli esistenti non funzionano, però.

Ho una piccola cosa nel mio bashrc che continua a far funzionare le funzioni di inoltro delle chiavi quando riprendo tmux, ma ho difficoltà a capire come farlo per continuare a lavorare per sessioni aperte all'interno di tmux.

Ad esempio, ho bastion01, dbhost01, dbhost02, webhost01 e webhost02.

Se apro una connessione a bastion01, inizio da lì tmux e quindi mi connetto a dbhost01 e webhost01 funziona inoltro. Se chiudo quella connessione, ricollego e allego la mia sessione tmux esistente, quindi aggiungo connessioni a dbhost02 e webhost02, l'inoltro della chiave funziona sulle 02 caselle, ma non sullo 01.

Per favore aiuto!

Risposte:


11

Ogni volta che si entra bastion01, viene aperto un socket diverso per gestire l'inoltro della chiave. Puoi vedere il nome file nella variabile d'ambiente SSH_AUTH_SOCK. All'avvio tmux, il valore di quella variabile di ambiente è incluso nell'ambiente tmuxglobale, che è ereditato da tutte le shell avviate in quella sessione.

Ora, quando ti riconnetti in un bastion01secondo momento, viene assegnato un socket diverso per gestire l'inoltro della chiave (poiché si tratta di una nuova sessione SSH). Puoi vederlo esaminando il valore di SSH_AUTH_SOCKprima di ricollegarti alla tmuxsessione e dopo. Affinché il key forwarding funzioni all'interno tmux, è necessario aggiornare il valore di SSH_AUTH_SOCKinside tmuxcon il nome del socket utilizzato dalla sessione ssh corrente.

Un modo semplice e veloce per farlo è quello di scrivere un breve script che salverà questo nuovo valore in un file ed eseguirlo all'interno di qualsiasi tmuxfinestra da cui verrai ssh.

#!/bin/bash

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh

Esegui quello script non appena bastion01entri, ma prima di ricollegarti alla tua sessione di tmux. Quindi, prima di provare a ssh ovunque dall'interno tmux, eseguire quanto segue:

source ~/.auth_ssh

Ogni tmuxfinestra ha il suo ambiente, quindi dovrai eseguirlo in ogni finestra in cui provi a eseguire ssh. Per semplicità, puoi alias ssh farlo per te:

alias ssh="source ~/.auth_ssh; ssh"

Nota: questa è una grossolana semplificazione di uno script che utilizziamo sul posto di lavoro per aggiornare le informazioni di autorizzazione SSH. Se non funziona abbastanza bene, spero che questo ti dia almeno informazioni sufficienti per google una soluzione migliore (o qualcun altro pubblica una soluzione migliore qui).

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.