Wenn ich mich bei einem Rechner anmelde mitsshIch wünsche meinemAliaseUndFunktionensind da. Mit anderen Worten: Wenn ich mich an einem Computer anmelde, möchte ich meine Befehlskürzel verwenden können.
Ich brauche es dynamisch. Jedes Mal, wenn ich mich anmelde, möchte ich aktualisierte Aliase haben.
Hinweise: Sehr oft erfolgt die Anmeldung zum ersten Mal, ohne dass der Rechner und die dort vorhandenen Dateien bekannt sind. Manchmal ist es eine einmalige Anmeldung. Nur ein Mal für diesen Rechner. Dieser muss anschließend bereinigt werden, und die vorherige Konfiguration muss ebenfalls wiederhergestellt werden.
Antwort1
Sie können Ihre Datei vorübergehend .bashrc
unter einem anderen Namen auf Ihren Remote-Computer kopieren. Verwenden Sie beispielsweise .bashrc_temp
:
user@local$ scp .bashrc user@remote:~/.bashrc_temp
Anschließend können Sie sich beim Remote-Rechner anmelden:
user@local$ ssh user@remote
Undsource
die Datei .bashrc_temp
:
user@remote$ source ~/.bashrc_temp
Jetzt können Sie Ihre und Ihre Funktionen verwenden .bashrc
. Wenn Sie mit Ihrer Arbeit fertig sind, können Sie die Datei ~/.bashrc_temp auf dem Remote-Computer entfernen und sich abmelden.
Das Kopieren der Datei und die Anmeldung am Remote-Computer können mit einer Bash-Funktion erreicht werden:
# copy the .bashrc to the remote machine
# and log into the remote machine.
# parameter $1: user@remote
function s() {
scp ~/.bashrc $1:~/.bashrc_temp
ssh $1
}
Aktualisieren:
.bashrc
Sie können auch erwägen, die Datei /tmp
auf Ihren Remotecomputer und die Quelle zu kopieren /tmp/.bashrc_temp
.
Aktualisierung 2:
Sie können sich am Remote-Computer anmelden, indem Siessh -t. Dadurch wird automatisch Ihre Zeit verwendet .bashrc
. Aktualisierte Funktion s()
:
function s() {
scp ~/.bashrc $1:/tmp/.bashrc_temp
ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}
Antwort2
Ich denke, sshrc ist das, wonach Sie suchen: https://github.com/Russell91/sshrc
sshrc funktioniert genau wie ssh, aber es bezieht nach der Remote-Anmeldung auch ~/.sshrc.
$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome
$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'
Damit können Sie Umgebungsvariablen festlegen, Funktionen definieren und Post-Login-Befehle ausführen. So einfach ist das und es hat keine Auswirkungen auf andere Benutzer auf dem Server – selbst wenn diese ebenfalls sshrc verwenden. Lesen Sie weiter, um eine erweiterte Konfiguration zu erhalten.
Antwort3
jens-na hat eine hervorragende Antwort gegeben. Ich habe ein bisschen Zeit investiert und es ein bisschen überarbeitet, damit es ein kleines bisschen besser funktioniert. Auf diese Weise können Sie beliebige Parameter an SSH weitergeben, z. B. Portnummern. Der Unterschied besteht darin, dass ssh
zum Hochladen der .bashrc
Datei der Befehl verwendet wird, anstatt scp
, das andere Befehlsparameternamen verwendet.
Sie werden auch feststellen, dass eine andere Datei hochgeladen wird, .bashrc_remote
sodass Sie genau auswählen können, was Sie auf Remote-Servern beziehen möchten, anstatt alles
sshs() {
ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}
Führen Sie es wie folgt aus:
sshs user@server
Der Name ' sshs
' steht für "SSH-Quelle". Verwenden Sie ihn, ssh
wenn Sie keine Quelle verwenden möchten, und verwenden Sie ihn, sshs
wenn Sie dies möchten.
Antwort4
Das ist, was mir eingefallen ist. Damit können Sie eine normale RC-Datei verwalten, aber auch alles in einer SSH-Verbindung erledigen (Sie müssen sich also nur einmal anmelden, anstatt zuerst ein SCP auszuführen).
#copies some environment over to the remote machine
function ssh() {
/usr/bin/ssh -t $* "echo `base64 -i ~/bin/remote_ssh_env.sh` | base64 --decode > /tmp/remote_ssh_env.sh; bash --rcfile /tmp/remote_ssh_env.sh"
}
Ich bin mir allerdings nicht sicher, wie groß diese RC-Datei sein kann, da sie irgendwann ihr Maximum erreichen könnte.