TL; DR
Речі ускладнюються лише тоді, коли у вас є сервер бастіонів, який потрібно використовувати.
Ви можете передати ssh
як команду, щоб ssh
подобатися так:
cat local_script.sh | ssh -A usera@bastion ssh -A userb@privateserver "cat > remote_copy_of_local_script.sh; bash remote_copy_of_local_script.sh"
Остерігайтеся псевдотерміналів
Зауважте, що тут важливим є те ssh
, що , як і більшість інструментів, за замовчуванням просто обробляє stdout
та stdin
виправляє.
Тим НЕ менше, коли ви починаєте бачити варіант , як Disable pseudo-terminal allocation.
і Force pseudo-terminal allocation.
ви , можливо , доведеться зробити трохи проб і помилок. Але, як правило, ви не хочете змінювати tty
поведінку, якщо ви не намагаєтеся виправити зімкнутий / двійковий мотлох в емуляторі терміналів (у чому людські типи).
Наприклад, я, як правило, використовую -At
так, щоб ssh-агент моєї робочої станції пересилався, і щоб дистанційно запущений tmux не передавав бінарні файли (як ssh -At bastion.internal tmux -L bruno attach
). І для докера теж (як так sudo docker exec -it jenkins bash
).
Однак ці два -t
прапори викликають важке відстеження пошкодження даних, коли я намагаюся зробити щось подібне:
# copy /etc/init from jenkins to /tmp/init in testjenkins running as a container
ssh -A bastion.internal \
ssh -A jenkins.internal \
sudo tar cf - -C /etc init | \
sudo docker exec -i testjenkins \
bash -c 'tar xvf - -C /tmp'
# note trailing slashes to make this oneliner more readable.