GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ssh – Wie führe ich ein Skript sofort nach der Verbindung über SSH aus?

Ich fing an, diese Frage zu stellen, beantwortete sie aber, während ich sie offen hatte. Ich werde diese Frage posten, sie mit meiner Lösung verfolgen und sie für andere mögliche Lösungen offen lassen.

< Hintergrundgeschichte>

Ich bin ein tmux- und vim-Benutzer. Ich mag Remote-Vim-Arbeit, da ich mir keine Sorgen machen muss, dass Ubuntu-Entwicklungsmaschinen ausbrechen, wenn ein Flash-Film bei mir eine Kernel-Panik auslöst. Das Ausführen von tmux bedeutet, dass offene Dateien nach dem Neustart auf mich warten und ich dort weitermachen kann, wo ich aufgehört habe. Ich hatte Probleme mit vim in einer tmux-Sitzung, wenn ich mich wie folgt verbinde:

ssh example.com -t 'tmux attach'

Es treten UTF-8-Probleme auf, die nicht auftreten, wenn Sie normal einsteigen und einfach manuell an eine tmux-Sitzung anhängen.

< /Hintergrundgeschichte>

Ich möchte also eine wiederverwendbare Methode, um etwas bei der SSH-Anmeldung zu starten, die keine der anderen Dinge betrifft, die ich in meiner .zshrc konfiguriert habe (oder Ihre .bashrc wenn Sie immer noch bash verwenden), die möglicherweise für meine Entwicklungsumgebung erforderlich sind, werden nicht angezeigt, wenn ich gelegentlich lokal auf eben dieser Maschine arbeite.

Akzeptierte Antwort:

Wenn Sie ssh example.com ausführen , startet der ssh-Daemon eine Login-Shell für Sie und die Login-Shell liest Ihren ~/.profile (oder ~/.bash_profile oder ~/.zprofile oder ~/.login abhängig von Ihrer Login-Shell). Wenn Sie einen Befehl angeben, der remote ausgeführt werden soll (mit oder ohne -t ), startet der ssh-Daemon eine gewöhnliche Shell, also Ihre .profile wird nicht gelesen. Abhilfe:

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

Die meisten ssh-Daemons sind so konfiguriert, dass sie die Übertragung von Umgebungsvariablen mit Ausnahme von LC_* ablehnen . Wenn der ssh-Daemon auf example.com erlaubt, können Sie einen benutzerdefinierten LC_* missbrauchen Variable, um tmux automatisch zu starten — fügen Sie diese in Ihr ~/.profile ein :

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

Melden Sie sich dann mit LC_tmux_session= ssh example.com an oder LC_tmux_session=session_name ssh example.com .

Diese Antwort enthält weitere Informationen zum Übergeben von Umgebungsvariablen über ssh.


Linux
  1. Wie man über eine Zwischenmaschine scp??

  2. Wie führt man Skriptdateien (.sh) in einem neuen Terminal aus, nachdem man sich über SSH mit dem Ubuntu 16.04-Server verbunden hat?

  3. Wie führe ich ein Skript aus, nachdem Openvpn erfolgreich verbunden wurde?

  4. Wie man ein Skript ausführt??

  5. Führen Sie das Bash-Skript nach der Anmeldung aus

So führen Sie ein Python-Skript in PHP aus

So führen Sie ein Bash-Skript aus

So führen Sie „find -exec {};?

Wie führe ich ein Skript nach dem Fortsetzen und nach dem Entsperren des Bildschirms aus?

So halten Sie Remote-SSH-Sitzungen nach der Trennung am Laufen

So führen Sie SSH zum Server über Linux