टी एल; डॉ
जब आपके पास एक गढ़ सर्वर का उपयोग किया जाना चाहिए, तो चीजें केवल थोड़ी अधिक जटिल हो जाती हैं ।
आप ऐसा करने ssh
के लिए आदेश के रूप में पारित कर सकते हैं ssh
:
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"
छद्म टर्मिनलों से सावधान रहें
ध्यान दें कि यहां मुख्य महत्व का बिंदु यह है कि ssh
अधिकांश उपकरण की तरह, बस डिफ़ॉल्ट रूप से व्यवहार करता है stdout
और stdin
सही है।
हालाँकि, जब आप जैसे विकल्प देखना शुरू करते हैं Disable pseudo-terminal allocation.
और Force pseudo-terminal allocation.
आपको थोड़ा परीक्षण और त्रुटि करने की आवश्यकता हो सकती है। लेकिन, एक सामान्य नियम के रूप में आप tty
व्यवहार में परिवर्तन नहीं करना चाहते हैं जब तक कि आप टर्मिनल एमुलेटर (एक मानव प्रकार में) में गारबेड / बाइनरी जंक को ठीक करने की कोशिश नहीं कर रहे हैं।
उदाहरण के लिए, मैं उपयोग करना चाहता हूं -At
ताकि मेरे कार्य केंद्र के ssh- एजेंट को आगे बढ़ाया जाए, और ताकि tmux को दूरस्थ रूप से चलाने से बाइनरी बाइनरी न हो (जैसे ssh -At bastion.internal tmux -L bruno attach
)। और, कर्ता के लिए भी (जैसे sudo docker exec -it jenkins bash
)।
हालाँकि, उन दो -t
झंडों से डेटा भ्रष्टाचार पर नज़र रखने में थोड़ी मुश्किल होती है, जब मैं ऐसा कुछ करने की कोशिश करता हूँ:
# 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.