TL; DR
Hal-hal hanya menjadi sedikit lebih rumit ketika Anda memiliki server benteng yang harus digunakan.
Anda dapat mengirimkan sshsebagai perintah untuk sshmenyukainya:
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"
Waspadai terminal palsu
Perhatikan bahwa poin penting utama di sini adalah ssh, seperti kebanyakan alat, hanya memperlakukan stdoutdan stdinmemperbaiki secara default.
Namun, ketika Anda mulai melihat opsi suka Disable pseudo-terminal allocation.dan Force pseudo-terminal allocation.Anda mungkin perlu melakukan sedikit trial and error. Tapi, sebagai aturan umum Anda tidak ingin mengubah ttyperilaku kecuali Anda mencoba untuk memperbaiki sampah yang rusak / biner di emulator terminal (apa yang diketikkan oleh manusia).
Sebagai contoh, saya cenderung menggunakan -Atsehingga ssh-agent workstation saya diteruskan, dan menjalankan tmux dari jarak jauh tidak muntah biner (seperti begitu ssh -At bastion.internal tmux -L bruno attach). Dan, untuk buruh pelabuhan juga (seperti itu sudo docker exec -it jenkins bash).
Namun, kedua -tflag tersebut menyebabkan beberapa sulit untuk melacak korupsi data ketika saya mencoba melakukan sesuatu seperti ini:
# 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.