TL; DR
Hal-hal hanya menjadi sedikit lebih rumit ketika Anda memiliki server benteng yang harus digunakan.
Anda dapat mengirimkan ssh
sebagai perintah untuk ssh
menyukainya:
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 stdout
dan stdin
memperbaiki 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 tty
perilaku kecuali Anda mencoba untuk memperbaiki sampah yang rusak / biner di emulator terminal (apa yang diketikkan oleh manusia).
Sebagai contoh, saya cenderung menggunakan -At
sehingga 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 -t
flag 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.