سؤال SCP بين مضيفين عن بعد من جهاز الكمبيوتر الخاص بي (الثالث)


لدي اثنين من المضيفين عن بعد.
host1-> 10.3.0.1
host2-> 10.3.0.2
كلاهما يديران خادم ssh.

يستمع الملقم ssh على المنفذ 22 في host1 وعلى منفذ 6969 في host2. الآن ، باستخدام الجهاز المحلي ، أحتاج إلى نسخ شيء ما من host1 إلى host2 بدون تسجيل الدخول إلى host1 أو host2 عبر ssh. شيء مثل،

scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file

كيف يمكنني القيام بذلك ، يرجى ملاحظة أن المضيفين يستخدمان منافذ مختلفة لـ ssh.


112
2017-12-10 13:49


الأصل


هل تسألين عما إذا كان يمكنك الانتقال من مضيف بعيد إلى مضيف بعيد ، أو هل تسأل عن كيفية القيام بذلك دون الحاجة إلى توفير كلمة مرور؟ - glenn jackman
بينما ال -P يوجد علم لتحديد المنفذ المراد استخدامه ، في حالة النقل عن بعد ، ssh كما لا يوجد سلوك محدد حول كيفية تحديد منفذ لكل مضيف ... - mveroone


الأجوبة:


في الماضي ، الطريقة التي scp عملت ، عندما دعا (بسذاجة) لنسخ الملفات بين الأنظمة البعيدة ، كان غير مريح للغاية: إذا كتبت ، على سبيل المثال

    scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

scp سوف يفتح أولا ssh جلسة على remote1 ، ومن ثم سيتم تشغيله scp من هناك إلى remote2. لهذا العمل ، سيكون لديك لإعداد بيانات اعتماد التفويض ل remote2 على remote1.

الطريقة الحديثة للقيام بذلك ، بدلا من ذلك ، ("حديثة" لأنها نفذت قبل بضع سنوات فقط ، وربما ليس الجميع لديه -3-capable scp) يتطلب خطوتين. الخطوة الأولى الضرورية هي استخدام ~/.ssh/config لإعداد جميع الخيارات للاتصال بكل من remote1 و remote2 ، على النحو التالي:

    Host remote1.example.org
    Port 2222
    IdentityFile /path/to/host1-id_rsa

    Host remote2.example.org
    Port 6969
    IdentityFile /path/to/host2-id_rsa

بهذه الطريقة يصبح من الممكن تمرير جميع الخيارات الضرورية للأمر بدون غموض: على سبيل المثال ، إذا قلنا على CLI استخدم المنفذ 2222 بدون التكوين أعلاه ، كان من غير الواضح ما إذا كنا نشير إلى ذلك remote1 أو ل REMOTE2، وبالمثل بالنسبة للملف الذي يحتوي على مفاتيح cryptgraphic. وبهذه الطريقة تظل CLI مرتبة وبسيطة.

ثانيا ، استخدام -3 الخيار ، على النحو التالي:

    scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

ال -3 يرشد الخيار scp لتوجيه حركة المرور عبر جهاز الكمبيوتر الذي تم إصدار الأمر عليه ، على الرغم من أنه الطرف الثالث للنقل. بهذه الطريقة ، يجب أن تكون بيانات اعتماد التفويض موجودة فقط على جهاز الكمبيوتر الذي أصدر البيانات ، وهو الطرف الثالث.


185
2017-12-10 18:32



للرجوع إليها مستقبلاً: إذا قمت بنسخ ملف بين مضيفين يشتركان في ملف هوية (مثل مثيل EC2) ، فأنت لا تحتاج إلى ملف التكوين. تُعد حجة -i واحدة كافية للاتصال بكلا المضيفين. - Artur Czajka
ومن الجدير بالذكر أيضًا ، بالنسبة إلى Google Compute Engine ، هناك دعم للإضافة إلى ~/.ssh/config ملف: cloud.google.com/compute/docs/gcloud-compute لكنني لا أعتقد أن AWS لديها نفس الدعم - modulitos


في المرة الأخيرة حاولت هذا ، scp لم يكن قادرا على القيام بذلك. سطر الأوامر الخاص بك يبدو بخير. سيعمل هذا الحل البديل:

ssh -p port_on_machine1 user@machine1 "cat /path/to/file/one"|ssh -p port_on_machine2 user@machine2 "cat >/path/to/file/two"

5
2017-12-10 14:17



صفحة my scp man تقول "مسموح أيضًا بنسخ بين مضيفين نائيين". - glenn jackman
شكرا ، من الجيد أن تسمع. للحصول على scp يمكنك إعطاء علامة -P (تم كتابتها من قبل بعض الأشخاص BSD ، وذلك لأن التعامل مع حجة لها مأساوي :-() ، ولكن يبدو أنك لا تستطيع تحديد منافذ مختلفة على المضيفين عن بعد. ولكن أعتقد أن هذا هو الحل البديل فقط (أو أن هناك الكثير من الحلول الأصعب ، باستخدام ssh ولكن تجنب scp - على سبيل المثال ، sftpfs ، ولكنها ليست أبسط). لقد وسعت حولي مع إعدادات المنفذ. - peterh


في حالتي ، كنت أفعل عن بعد إلى نسخة عن بعد ، withouth و -3 جدال. يعمل المنفذ المعطى مع المعلمة '-P' مع الخادم الأول ، ولكن المنفذ 22 مستخدم مع الخادم الثاني.

ssh -P 1234 user@server1.mydomain.com user@server2.otherdomain.com

الحل هو تحرير /etc/ssh/ssh_config إملأ server1 وأضف هذه الخطوط:

Host *.otherdomain.com
   Port  1234

بهذه الطريقة ، يتم استخدام المنفذ 1234 لكل منهما. يمكن أن يكون مختلفا أيضا.

هذا الحل له صبيب أفضل من الحلول السابقة ، لأن التشاركية مباشرة.


4
2018-01-26 14:18



perez هل هناك طريقة لتحقيق scp من خلال اثنين من منافذ مختلفة لآلات مختلفة عن بعد من خط comman؟ - Red Bottle