Escape Pipes, Weiterleitungen und Semikolons
ssh -t me@jumphost "ssh -t me@restrictedhost echo "$(~/.bashrc | base64 -w 0)" \| base64 --decode \> /tmp/my_bashrc \; bash --rcfile /tmp/my_bashrc"
Erläuterung:
- Sie müssen Pipes, Umleitungen und Semikola vermeiden, damit der Jumphost sie nicht interpretiert. Sie möchten, dass der eingeschränkte Host sie interpretiert. Der Jumphost sollte alles wortwörtlich bestehen.
- Sie geben den lokalen
.bashrc
Inhalt auf dem eingeschränkten Host wieder, der als base64 gekennzeichnet ist, sodass Sie sich nicht mit Zeilenumbrüchen (oder Sonderzeichen) befassen müssen. Gott sei Dank für die Basis 64! - Tatsächlich kopiert dies die .bashrc-Datei aus dem CLIENT, nicht den Jumphost (was noch besser ist).
sshpass
sshpass -p jumphostpas$word autossh -M0 -t jumphostusername@jumphostname "sshpass -p restrictedhostpas\\\$word autossh -M0 -t restrictedhostusername@restrictedhostname echo "$(cat ~/.bashrc | base64 -w 0)" \| base64 \\\-\\\-decode \> /tmp/my_bashrc \; bash \\\-\\\-rcfile /tmp/my_bashrc "
Schlüsselbindung (ZSH)
Wenn Sie dies als ZSH-Schlüsselbindung festlegen möchten, führen Sie folgende Schritte aus:
bindkey -s "^[K" 'sshpass -p passwordjumphost autossh -M0 -t usernamejumphost@jumphostname "sshpass -p pas\\\\\\$wordrestrictedhost autossh -M0 -t usernamerestrictedhost@restrictedhostname echo "$(cat ~/.bashrc | base64 -w 0)" \\| base64 \\\\\\-\\\\\\-decode \\> /tmp/my_bashrc \\; bash \\\\\\-\\\\\\-rcfile /tmp/my_bashrc "'