TL; DR
Die Dinge werden nur etwas komplizierter, wenn Sie einen Bastion-Server haben , der verwendet werden muss.
Sie können sshals Befehl übergeben, um sshso 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 stdoutund stdinkorrigiert 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 ttyVerhalten 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, -Atden 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 -tFlags 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.