
Ich möchte das folgende Skript in .profile erstellen, sodass jede SSH-Sitzung direkt an ihre Stelle tritt:
- Überprüfen Sie den angegebenen Host (Benutzer@Host).
- Wenn Host = Host1 - cd /var/www/site1
usw.
Helfen! :)
Antwort1
Ich bin ziemlich sicher, dass SSH den Hostnamen nicht an den Server sendet (es verwendet ihn nur lokal, um eine IP-Adresse nachzuschlagen und Schlüssel usw. zu überprüfen). Zumindest nicht auf eine Weise, die in einem Shell-Skript verwendet werden kann.
Siehe die Ausgabe von env
– der einzige Hostname ist der kanonische, unabhängig davon, welcher Name im SSH-Befehl verwendet wurde.
Einige SSH-Clients und einige SSH-Server erlauben es dem Client, einen Wert für eine oder mehrere Umgebungsvariablen anzugeben. Sie können dies beispielsweise verwenden, um dem Server mitzuteilen, in welches Verzeichnis er wechseln soll. Siehe beispielsweise PuttyKonfiguration, Verbindung, Datenoder OpenSSHSendEnvMöglichkeit.
Andernfalls hat man für jede Website eine eigene Benutzerkennung mit einem anderen Domänennamen oder muss dem Benutzer ein Menü anbieten.
Antwort2
Ihre Frage ist unklar: Erreichen Sie denselben Host über mehrere Aliase? Erreichen Sie verschiedene Hosts, die sich einen teilen .profile
? Versuchen Sie, Befehle basierend auf dem Quellhostnamen oder den Zielhostnamen auszuführen?
Wenn Sie auf verschiedenen Remote-Hosts unterschiedliche Effekte erzielen möchten, testen Sie einfach den Namen des Remote-Hosts:
case "$(hostname)" in
host1) cd /var/www/site1;;
esac
Wenn Sie unterschiedliche Effekte auf demselben Host wünschen, können Sie die SendEnv
Anweisungen in Ihrem~/.ssh/config
zum Senden von Umgebungsvariablen (vorausgesetzt Sie verwenden dieOpenSSHClient). Diese müssen mit einemAcceptEnv
Direktive auf der Serverseite, was oft nicht der Fall ist. LC_*
Variablen werden jedoch normalerweise durchgelassen, sodass Sie Informationen mithilfe dieser weitergeben können. Führen Sie auf der Clientseite aus LC_VIRTUAL_HOST=site1 ssh common-host.provider.com
. .profile
Schreiben Sie in Ihrem auf dem Server
case "$LC_VIRTUAL_HOST" in
host1) cd /var/www/site1;;
esac