टी एल; डॉ
जब आपके पास एक गढ़ सर्वर का उपयोग किया जाना चाहिए, तो चीजें केवल थोड़ी अधिक जटिल हो जाती हैं ।
आप ऐसा करने 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.