Chciałbym automatycznie uruchamiać polecenie za każdym razem, gdy pomyślnie połączę się ze zdalnym hostem przez ssh.
Mogę to zrobić dla pierwszego połączenia z każdym hostem przy użyciu wpisów PermitLocalCommand yesi LocalCommand ~/bin/ssh-notify-mew mojej ~/.ssh/config, podobnie jak w tej odpowiedzi, ale używam również dość agresywnej konfiguracji multipleksowania ssh (w przybliżeniu następujące):
Host *
PermitLocalCommand yes
ServerAliveCountMax 2
ServerAliveInterval 5
ControlPath ~/.ssh/mux/%r@%h:%p
ControlMaster auto
ControlPersist 1h
Przy tej konfiguracji LocalCommand jest wykonywany tylko dla pierwszego połączenia, zanim istnieje gniazdo kontrolne master / mux. Następnie łączę się, ale polecenie nie działa.
Czy jest jakiś sposób (bez wyłączania multipleksera), aby upewnić się, że LocalCommand lub jakiś równoważny wystąpi dla każdej nowej otwartej sesji interaktywnej?
Zawijanie sshpliku binarnego w funkcji powłoki lub skrypcie wydaje się, że nie zadziałałoby, ponieważ nie może wiedzieć, czy połączenie zakończyło się powodzeniem, dopóki nie zostanie zakończone.
ssh fooi ssh foo -t <cmd>, ale nie scp / cokolwiek innego, co nie ma przydzielonego pty. Edytowane pytanie do wyjaśnienia.
automatically run a command every time I successfully connect- I dokładnie tak się dzieje. man 5 ssh_configmówi o ControlMaster: Enables the sharing of multiple sessions over a single network connection. Jest tylko jedno połączenie. Proces główny sshgo tworzy (łączy), sshużywa go każdy kolejny . Rozumiem, co chcesz osiągnąć; Chodzi mi o to, że używasz słowa „połączenie”, gdzie „sesja” jest tym, co masz na myśli.