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