TL; DR
Mọi thứ chỉ trở nên phức tạp hơn một chút khi bạn phải sử dụng máy chủ pháo đài .
Bạn có thể chuyển sshnhư lệnh để sshthích như vậy:
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"
Cẩn thận với thiết bị đầu cuối giả
Lưu ý rằng điểm quan trọng chính ở đây là ssh, giống như hầu hết các công cụ, chỉ cần xử lý stdoutvà stdinsửa theo mặc định.
Tuy nhiên, khi bạn bắt đầu thấy tùy chọn như thế nào Disable pseudo-terminal allocation.và Force pseudo-terminal allocation.bạn có thể cần phải thực hiện một thử nghiệm và lỗi nhỏ. Nhưng, như một quy tắc chung, bạn không muốn thay đổi ttyhành vi trừ khi bạn đang cố gắng sửa lỗi rác bị cắt xén / nhị phân trong trình giả lập thiết bị đầu cuối (kiểu con người nhập vào).
Ví dụ, tôi có xu hướng sử dụng -Atđể ssh-agent của máy trạm của tôi được chuyển tiếp và do đó, việc chạy tmux từ xa không phải là nhị phân barf (như vậy ssh -At bastion.internal tmux -L bruno attach). Và, đối với docker cũng vậy (như vậy sudo docker exec -it jenkins bash).
Tuy nhiên, hai -tlá cờ đó gây ra một số khó khăn để theo dõi tham nhũng dữ liệu khi tôi cố gắng làm một cái gì đó như thế này:
# 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.