GNU/Linux >> Znalost Linux >  >> Linux

Ssh – Jak spustit skript ihned po připojení přes Ssh?

Začal jsem klást tuto otázku, ale odpověděl jsem na ni, když jsem ji měl otevřenou. Zveřejním tuto otázku, budu na ni navazovat svým řešením a nechám ji otevřenou pro další potenciální řešení.

< backstory>

Jsem uživatel tmux a vim. Mám rád práci se vzdáleným vimem, protože se nemusím starat o to, že vývojové stroje Ubuntu vyběhnou, když mi flashový film vyvolá paniku jádra. Spuštění tmux znamená, že otevřené soubory na mě čekají po restartu a mohu pokračovat tam, kde jsem skončil. Měl jsem problémy s vim běžícím v relaci tmux, když se připojím takto:

ssh example.com -t 'tmux attach'

Objeví se problémy s UTF-8, které se neobjeví při normálním ostřelování a pouze ručním připojení k relaci tmux.

< /backstory>

Takže chci znovu použitelnou metodu spouštění něčeho na přihlášení ssh, která neovlivní žádné další věci, které jsem nakonfiguroval v .zshrc (nebo váš .bashrc pokud stále používáte bash), který může být vyžadován pro mé vývojové prostředí, neobjeví se, když příležitostně pracuji lokálně na právě zmíněném počítači.

Přijatá odpověď:

Když spustíte ssh example.com , démon ssh za vás spustí přihlašovací shell a přihlašovací shell přečte váš ~/.profile (nebo ~/.bash_profile nebo ~/.zprofile nebo ~/.login v závislosti na vašem přihlašovacím prostředí). Když zadáte příkaz, který se má spustit vzdáleně (s nebo bez -t ), ssh démon spustí obyčejný shell, tedy váš .profile není přečteno. Náprava:

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

Většina démonů ssh je nakonfigurována tak, aby odmítala přenos proměnných prostředí kromě LC_* . Pokud je démon ssh na example.com umožňuje, můžete zneužít vlastní LC_* proměnná pro automatické spouštění tmux — vložte ji do svého ~/.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

poté se přihlaste pomocí LC_tmux_session= ssh example.com nebo LC_tmux_session=session_name ssh example.com .

Tato odpověď obsahuje více informací o předávání proměnných prostředí přes ssh.


Linux
  1. Jak spustit „find -exec {};?

  2. Jak Scp přes střední stroj?

  3. Jak spustit skript po úspěšném připojení Openvpn?

  1. Jak spustit skript??

  2. Jak zajistit, aby program běžel i po odhlášení z ssh?

  3. Spusťte trvalý proces přes ssh

  1. Jak spustit skript shellu při spuštění

  2. Po přihlášení spusťte bash skript

  3. Jak ukončit SSH vagrant v terminálu