TL; DR
Die Dinge werden nur etwas komplizierter, wenn Sie einen Bastion-Server haben , der verwendet werden muss.
Sie können ssh
als Befehl übergeben, um ssh
so zu mögen:
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"
Vorsicht vor Pseudo-Terminals
Beachten Sie, dass der wichtigste Punkt hier ist, dass ssh
, wie bei den meisten Werkzeugen, standardmäßig nur behandelt stdout
und stdin
korrigiert wird.
Wenn Sie jedoch beginnen Option wie um zu sehen , Disable pseudo-terminal allocation.
und Force pseudo-terminal allocation.
man kann einen wenig Versuch und Irrtum tun müssen. In der Regel möchten Sie das tty
Verhalten jedoch nicht ändern , es sei denn, Sie versuchen, verstümmelten / binären Müll in einem Terminal-Emulator zu beheben (was ein Mensch eintippt).
Zum Beispiel neige ich dazu, -At
den ssh-agent meiner Workstation weiterzuleiten und tmux aus der Ferne auszuführen, ohne Binärdateien zu blockieren (wie dies der Fall ist ssh -At bastion.internal tmux -L bruno attach
). Und auch für Hafenarbeiter (wie so sudo docker exec -it jenkins bash
).
Diese beiden -t
Flags führen jedoch dazu, dass es schwierig ist, Datenbeschädigungen aufzuspüren, wenn ich so etwas wie Folgendes versuche:
# 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.