GNU/Linux >> Znalost Linux >  >> Linux

Musím znovu nastavit Env Vars v Tmux, když znovu připojím?

Pracuji hlavně na mac a ssh/tmux se připojuji k linuxovému stroji, abych dělal svou práci. Mám ssh-agent spuštěný na počítači Linux. Mám

set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY"

v mém .tmux.conf . Přesto, kdykoli se znovu připojím k této relaci, musím spustit

tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

aby nová okna tmux měla $SSH_AUTH_SOCK nastavit správně. Raději bych to nemusel dělat. Nějaké nápady?

Aktualizovat

Myslím, že to nevysvětluji dobře. Zde je moje funkce shellu pro otevření shellu na vzdáleném počítači:

sshh () {
    tmux -u neww -n ${host} "ssh -Xt ${host} $*"
}

Když tmux spustí tento příkaz ssh, $SSH_AUTH_SOCK není nastavit, i když je zasazené do mého místního prostředí. Pokud to vložím do prostředí tmux s setenv příkaz výše, vše funguje dobře. Moje otázka zní, proč vůbec musím spouštět příkaz setenv?

Aktualizace 2

Více informací:

Když se připojím k existující relaci, $SSH_AUTH_SOCK není nastaven v prostředí tmux (nebo globálním prostředí).

% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK

Pokud to nastavím ručně, věci fungují:

% tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

Pokud odpojím a znovu připojím, $SSH_AUTH_SOCK se vrátí do stavu, kdy není nastaveno.

Přijatá odpověď:

Vzhledem k tomu, že jsem obdržel Bounty, znovu zveřejním svůj klíčový komentář pro úplnost – a abych nenavedl návštěvníky se stejným problémem na špatnou cestu:

Tmux odstraní proměnné prostředí

Manuální stránka Tmux uvádí, že update-environment odstraní proměnné „které ve zdrojovém prostředí neexistují […], jako by příkazu set-environment bylo dáno -r“.

Zřejmě to způsobilo problém. Podívejte se na Chrisovu odpověď níže. Stále si však nedokážu představit, jak by proměnná mohla chybět ve „zdrojovém prostředí“ a přitom být platná v nově vytvořeném okně tmux…

Předchozí odpověď:

Jak funguje přesměrování SSH

Na vzdáleném počítači se po navázání připojení SSH podívejte na prostředí vašeho shellu:

[email protected]:~$ env | grep SSH
SSH_CLIENT=68.38.123.35 45926 22
SSH_TTY=/dev/pts/0
SSH_CONNECTION=68.38.123.35 48926 10.1.35.23 22
SSH_AUTH_SOCK=/tmp/ssh-hRNwjA1342/agent.1342

Důležitý je zde SSH_AUTH_SOCK, který je aktuálně nastaven na nějaký soubor v /tmp. Pokud tento soubor prozkoumáte, uvidíte, že se jedná o zásuvku domény Unix – a je připojen ke konkrétní instanci ssh, ke které jste se připojili. Důležité je, že se to změní při každém připojení.

Jakmile se odhlásíte, tento konkrétní soketový soubor je pryč. Nyní, když půjdete a znovu připojíte svou relaci tmux, uvidíte problém. Má prostředí z doby, kdy byl tmux původně spuštěn – což mohlo být před týdny. Ten konkrétní socket je dávno mrtvý.

Související:Shell test, zda víceřádkový řetězec obsahuje zadaný vzor v posledním řádku?

Řešení

Protože víme, že problém souvisí s tím, kde je aktuálně aktivní ověřovací soket SSH, umístěme jej na předvídatelné místo!

Do souboru .bashrc nebo .zshrc na vzdáleném počítači přidejte následující:

# Predictable SSH authentication socket location.
SOCK="/tmp/ssh-agent-$USER-screen"
if test $SSH_AUTH_SOCK && [ $SSH_AUTH_SOCK != $SOCK ]
then
    rm -f /tmp/ssh-agent-$USER-screen
    ln -sf $SSH_AUTH_SOCK $SOCK
    export SSH_AUTH_SOCK=$SOCK
fi

Nemyslím si, že byste do svého tmux.conf ani nemuseli vkládat příkaz „update-environment“. Podle manuálové stránky je SSH_AUTH_SOCK již ve výchozím nastavení pokryto.

Kredit

Moje odpověď je výňatek z tohoto blogového příspěvku od Marka ‚xb95‘ Smitha, který vysvětluje stejný problém pro obrazovku.


Linux
  1. Env či ne Env?

  2. Tmux Socket Api?

  3. Jak nakonfigurovat Bashrc, aby uzavřel všechny relace Tmux, když zavřu terminál?

  1. Ssh-agent se nenastavuje (ssh_auth_sock, Ssh_agent_pid Env Vars Not Set)?

  2. Jak načíst Ubuntu, když vše, co mám, je Grub?

  3. Jak analyzuji výstup příkazu find, když názvy souborů obsahují mezery?

  1. Máme v Linuxu možnost vrátit zpět?

  2. Proměnné Env v /etc/environment nejsou globálně viditelné?

  3. Proč nemám zvýraznění syntaxe při sudo vi <název souboru>?