Применить .bashrc Jumphost к серверу во время SSH с клиента?

232
Sridhar-Sarnobat

Со следующей топологией:

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

Это успешно позволяет мне SSH в restrictedhost:

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

и приводит к ненастроенной оболочке bash:

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:~$  

Что я хочу, так это перенести мой точечный файл jumphost(не клиент, это более сложный), чтобы restrictedhost, среди прочего, я получил мое персональное приглашение:

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

Как я могу применить jumphost:/tmp/.bashrcфайл к оболочке в restrictedhost?

Что я знаю

  1. Когда не задействован Jumphost, это дает мне настройки Bash:

    ssh me@unrestricted "echo "$(cat $/.bashrc | base64 -w 0)" | base64 --decode > /tmp/$_bashrc; cd /tmp/; bash --rcfile /tmp/$_bashrc" 
  2. Если я непосредственно применяю 1. к переходу, я вообще не получаю командной строки (или других настроек bash):

    ssh -oProxyCommand="sshpass -p Empty$paces ssh -W %h:%p devteam@man1-pqa" devteam@queue1-pqa "bash --rcfile /tmp/_bashrc" 
0
Перекрестная публикация, потому что другой получает пониженное голосование и, вероятно, будет закрыт. Sridhar-Sarnobat 5 лет назад 0

1 ответ на вопрос

0
Sridhar-Sarnobat

Escape-трубы, перенаправления и точки с запятой

ssh -t me@jumphost "ssh -t me@restrictedhost echo "$(~/.bashrc | base64 -w 0)" \| base64 --decode \> /tmp/my_bashrc \; bash --rcfile /tmp/my_bashrc" 

Объяснение:

  • вам нужно экранировать каналы, перенаправления и точки с запятой, чтобы трамплин не интерпретировал их. Вы хотите, чтобы ограниченный хост интерпретировал их. Прыжок должен передать все дословно.
  • вы выводите локальное .bashrcсодержимое на узле с ограниченным доступом, экранируясь как base64, поэтому вам не нужно иметь дело с символами новой строки (или любыми специальными символами). Слава Богу за базу 64!
  • фактически это копирует файл .bashrc с КЛИЕНТА, а не Jumphost (что даже лучше).

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 " 

связывание ключей (ZSH)

Если вы хотите сделать привязку ключей ZSH, сделайте следующее:

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

Похожие вопросы