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 ssh
như lệnh để ssh
thí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ý stdout
và stdin
sử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 tty
hà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 -t
lá 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.