Anwenden von .umhrost .bashrc auf den Server während der ssh vom Client aus?

353
Sridhar-Sarnobat

Mit der folgenden Topologie:

 +----------+ ssh -J +--------+ +--------------+ |clienthost| =========> |jumphost| ====> |restrictedhost| +----------+ +--------+ +--------------+ .bashrc - - - - - > .bashrc 

Dies erlaubt mir erfolgreich ssh in restrictedhost:

ssh -oProxyCommand="ssh -W %h:%p me@jumphost" me@restrictedhost 

und führt zu einer nicht angepassten Bash-Shell:

Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-45-generic x86_64) Last login: Mon Nov 12 16:23:06 2018 from 10.250.20.3 me@restrictedhost:~$  

Was ich möchte, ist meine dotfile von jumphost(nicht der Client, das ist komplizierter) zu tragen, restrictedhostso dass ich unter anderem meine persönliche Eingabeaufforderung bekomme:

bash Mon Nov 12 16:36:21 ~/ me@MacBook-Pro> 

Wie kann ich eine jumphost:/tmp/.bashrcDatei auf die Shell anwenden restrictedhost?

Was ich weiß

  1. Wenn kein Jumphost involviert ist, kann ich meine Anpassungen anpassen:

    ssh me@unrestricted "echo "$(cat $/.bashrc | base64 -w 0)" | base64 --decode > /tmp/$_bashrc; cd /tmp/; bash --rcfile /tmp/$_bashrc" 
  2. Wenn ich 1. direkt auf den Sprung anwende, erhalte ich überhaupt keine Eingabeaufforderung (oder andere Bash-Anpassungen):

    ssh -oProxyCommand="sshpass -p Empty$paces ssh -W %h:%p devteam@man1-pqa" devteam@queue1-pqa "bash --rcfile /tmp/_bashrc" 
0
Cross-posted, weil der andere heruntergestuft wird und wahrscheinlich geschlossen wird. Sridhar-Sarnobat vor 5 Jahren 0

1 Antwort auf die Frage

0
Sridhar-Sarnobat

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 .bashrcInhalt 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 "'