سؤال هل هناك طريقة لملف تهيئة SSH واحد لتضمين ملفًا آخر؟


في حالة ما يهم:

  • نظام التشغيل: أوبونتو 10.04
  • SSH: OpenSSH_5.3p1 Debian-3ubuntu5

أريد ملف تهيئة SSH واحدًا لتضمين ملفًا آخر. ستكون حالة الاستخدام هي تحديد ما أريده في الوضع الافتراضي .ssh/config ثم قم بإدخال عدد من الأشياء الإضافية في ملف منفصل (على سبيل المثال ، ~/.ssh/foo.config). أريد أن يحتوي الملف الثاني على الملف الأول ، لذا لا يتعين علي تكرار كل شيء في أول واحد. هل هذا ممكن؟ شكر!


115
2018-02-18 17:45


الأصل


نفس السؤال على serverfault: serverfault.com/questions/375525/... - guettli


الأجوبة:


من 7.3p1 وحتى ، هناك Include الكلمة، مما يسمح لك بتضمين ملفات التكوين.

Include

      قم بتضمين ملف (ملفات) التكوين المحدد.   قد يتم تحديد أسماء مسار متعددة وكل مسار   قد تحتوي على glob (3) أحرف البدل و   بالنسبة لتكوينات المستخدم ، تشير إلى "~" shell إلى منزل المستخدم   الدلائل. الملفات دون مسارات مطلقة هي   يفترض أن يكون في ~/.ssh إذا أدرجت في ملف تكوين المستخدم   أو /etc/ssh إذا شملت من   ملف تكوين النظام. Include التوجيه قد   تظهر داخل Match أو Host منع   لأداء التضمين المشروط.
مصدر: ssh_config (5).

على سبيل المثال ، قد يكون لديك ~/.ssh/config:

Include config.d/home

Host github.com
    HostName github.com
    User git

و في ~/.ssh/config.d/home:

Host laptop
    HostName laptop.lan

من التعليقات ، استخدم أدناه لتضمين جميع الملفات في config.d دليل:

Include config.d/* 

109
2017-11-05 20:12



تحقق من الإصدار مع $ ssh -V - Pieter
استعمال Include config.d/* لتضمين جميع الإدخالات في config.d. - Simon Woodside
Ftr: يجب أن يكون هذا في أعلى الملف ولا يمكن إلحاقه بقائمة Host الإدخالات. - dtk
حاول على أوبونتو 16.04. على الرغم من أنه يعمل ، ولكن الإكمال التلقائي مكسور مما يجعلها أقل فائدة. إذا كنت ترغب في ترقية ssh على ubuntu ، فتحقق من هذا الرابط gist.github.com/stefansundin/0fd6e9de172041817d0b8a75f1ede677 - cwhsu


لا ، على حد علمي هذا غير ممكن.

فيما يلي الارتباطات إلى طلبات / طلبات الأخطاء المفتوحة المقابلة:

https://bugzilla.mindrot.org/show_bug.cgi؟id=1585

https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/739495


29
2018-02-18 17:54



أيضا هذا الخطأ على دبيان: bugs.debian.org/cgi-bin/bugreport.cgi؟bug=631189 - Lluís
يا الهي. انها تئن. من 2016-04-15 13:01:08 EST: Slightly modified patch applied, this will be in openssh-7.3 - oschrenk


إذا كنت ترغب في بدء عميل ssh ، يمكنك القيام بذلك في bash:

#files are .ssh/config and ~/.ssh/foo.config
alias ssh='ssh -F <(cat .ssh/config ~/.ssh/foo.config)'

ثم تستخدم ssh بشكل طبيعي وسيكون لديك كلا الملفين تقرأ في هذا الترتيب.

لخادم الخادم sshd يمكنك أن تفعل الشيء نفسه ، مجرد استخدام -f بدلا من -F واكتب هذا لأسفل حيث تبدأ البرنامج مباشرة. لست بحاجة إلى اسم مستعار.

الاحتمال الثاني وفقا لصفحة الرجل هو وضع النظام على نطاق واسع في التكوين /etc/ssh/ssh_config والمستخدم واحد في ~/.ssh/config.

تحديث يبدو أن هناك بعض المشاكل مع بعض إصدارات bash وكيف يتم إنشاء الأجهزة. (نرى http://bugs.alpinelinux.org/issues/1465)

هذا هو الحل (على الرغم من رأيي القبيح):

mkfifo /tmp/ssh_fifo
cat ~/.ssh/config ~/.ssh/foo.config >/tmp/ssh_fifo & 
ssh -F /tmp/ssh_fifo myserver
rm /tmp/ssh_fifo

لذلك إذا أردت ، يمكنك إنشاء وظيفة للخروج منه (أو برنامج نصي):

ssh() {
    tmp_fifo=$(mktemp -u --suffix=_ssh_fifo)
    mkfifo "$tmp_fifo" 
    cat ~/.ssh/config ~/.ssh/foo.config >"$tmp_fifo" 2>/dev/null & 
    /usr/bin/ssh -F "$tmp_fifo" "$@"
    rm "$tmp_fifo"
}

24
2018-04-19 10:51



للأسف هذا لا يعمل على ssh OSX: لا يمكن فتح ملف config الخاص بالمستخدم / dev / fd / 63: واصف الملف غير صالح - Ash Berlin-Taylor
لا يعمل بالنسبة لي أيضا على (أوبونتو 11.10) لينكس إعطاء نفس الخطأAshBerlin نشر أعلاه. - Szymon Jeż
AshBerlin قد تحاول ذلك أيضًا ، يجب أن يعمل هذا أيضًا مع OSX ، إلى أن يتم إصلاح الخطأ - estani
إعطاء ssh يتحقق ثلاثة أماكن ، 1. سطر الأوامر ، 2. ~/.ssh/config، 3. /etc/ssh/ssh_configلا يجب أن تمر ~/.ssh/config على سطر الأوامر أيضًا. مجرد alias ssh='ssh -F ~/.ssh/foo.config' و ~/.ssh/config يجب الحصول على التقطت بعد ذلك. طالما أنك لا تمانع foo.config يتم تحميلها أولاً يجب أن تكون أكثر نظافة من الحل البديل أعلاه. - jim
jim لا لا يعمل هكذا. أول واحد يتم استخدامه. هل جربته؟ من صفحة "-F configfile: تحديد لبديل ملف التكوين لكل مستخدم. إذا تم تقديم ملف تكوين في سطر الأوامر ، فسيتم تجاهل ملف التكوين على مستوى النظام (/ etc / ssh / ssh_config). " - estani


بدءًا من ssh 7.3 (تم إصداره في 1 آب 2016) ، Include التوجيه هو متاح.

تتضمن: تضمين ملف (ملفات) التكوين المحدد. مسار متعدد   قد يتم تحديد أسماء وكل اسم مسار قد يحتوي على glob   أحرف البدل ومراجع "~" shell-like إلى الدلائل الرئيسية المستخدم.   يفترض أن تكون الملفات بدون مسارات مطلقة ~/.ssh. ل    Include التوجيه قد يظهر داخل Match أو Host منع ل   أداء الاشتمال المشروط.

(في ما يلي الرابط لتقرير الخطأ المُحلل ، والذي يتضمن أيضًا تصحيح tha: https://bugzilla.mindrot.org/show_bug.cgi؟id=1585#c24)


16
2017-07-11 15:22





وبالمثل "القبيح" الآخر هنا الألغام واحد الخطوط الملاحية المنتظمة:

alias ssh="cat ~/.ssh/config.d/* > ~/.ssh/config; ssh"

14
2018-02-21 09:02



لاحظ أن sftp لن يؤدي الأمر إلى إعادة حساب التكوين. - VasyaNovikov
(ما زلت أحب الإجابة لأنها تستخدم "config.d /" وهي بسيطة جدًا.) - VasyaNovikov
بسيطة وأنيقة ، ولكن هاكي - code_monk


حسنا ، أنا غش كيندا للقيام بذلك. في ملفات bash .profile-ish لديّ كتلة تحل محل قطع متنوعة من دليل منزلي عند تسجيل الدخول ، لذلك أقوم فقط بإنشاء ملف جديد في كل مرة. مثال:

rm ~/.ssh/config
cat ~/conf/myservers.sshconfig >> ~/.ssh/config

[ -f ~/conf/workservers.sshconfig ] && cat ~/conf/workservers.sshconfig >> ~/.ssh/config
(or something like this:)
for i in `ls ~/conf/sshconfigs` ; do
    cat $i >> ~/.ssh/config
done

chmod 600 ~/.ssh/config

هذا يتيح لي أيضا القيام بأشياء مثل إضافة كتل التكوين لملف التكوين ssh فقط إذا كنت على المضيف A أو B ، ولكن ليس على أنظمة بيتي.

الآن أعلم أن شخصًا ما سيشعر أنه إذا سجّلت الكثير ، فقد يتسبب هذا في بطء شديد ، لكن في الواقع لم ألاحظ ذلك بالفعل. وأنا متأكد من أنك يمكن أن تضع هذا في برنامج نصي وإطلاقه عبر cron أيضا.


6
2017-11-20 19:26





أنا شخصيا استخدام تلك الأوامر لتجميع التكوين ssh:

alias compile-ssh-config='echo -n > ~/.ssh/config && cat ~/.ssh/*.config > ~/.ssh/config'
alias ssh='compile-ssh-config && ssh'
# (This will get used by other programs depending on the ~/.ssh/config)
# (If you need you can run the compile-ssh-config command via cron etc.)

أو:

alias compile-ssh-config='echo -n > ~/.ssh/config-compilation && cat ~/.ssh/*.config > ~/.ssh/config-compilation'
alias ssh='compile-ssh-config && ssh -F ~/.ssh/config-compilation'
# (This is saver and won't over write an existing ~/.ssh/config file)

لان:

alias ssh='ssh -F <(cat .ssh/*.config)'

لا يعمل بالنسبة لي ، عائدًا:

ssh: Can't open user config file /dev/fd/63: Bad file descriptor

آمل أن يكون هذا من أي مساعدة.


3
2017-11-27 15:14



يمكنك أن تخطو خطوة إلى الأمام وتدمج هذا مع fswatch ، للتجمع الآلي في تغيير الملف - cavalcade


آخر ، حل القائمة على FUSE (لم تختبر نفسي):

https://github.com/markhellewell/sshconfigfs

"بدلاً من الاضطرار إلى متابعة إدارة ملف واحد كبير ، [...] بدلاً من ذلك ، قم بإنشاء" ملف "تهيئة بشكل حيوي من العديد من قطع المنطقية الأصغر."

لقد عثرت أيضًا على مقالة تفعل ذلك من خلال نظام FIFO: http://www.linuxsysadmintutorials.com/multiple-ssh-client-configuration-files/


3
2018-06-10 17:54



هذا يبدو لي أن أكون بالكاد أكثر من رابط لموقع خارجي وبالتالي قد يتم إزالتها. (لأن الارتباطات قد "تموت" ومن المفيد على الأقل تلخيص المحتوى من مكان آخر بحيث لا يضطر الأشخاص إلى زيارة الموقع الآخر للحصول على أي تفاصيل.) - pnuts
أجد محتوى التعليق وصفيًا بما يكفي - حيث يقول "FUSE" (ربما يكون توسيع الاختصار أفضل) ؛ الرابط هو مجرد تنفيذ. - aviv
FUSE. aviv حسنا ، لم تتم إزالة الإجابة حتى الآن ، لذلك نأمل أن لا ضرر القيام به! - pnuts
لم يكن على بينة من مشكلة إجابات قصيرة ، والإجابة الموسعة. يبدو أنني سأضطر إلى التحقق مرة أخرى من الموقع لإجاباتي من وقت لآخر ، في غياب إخطارات البريد الإلكتروني :) تعلم استخدام favs ، الآن. شكرا على التعليقات. - amontero


لا شيء من هذه الحلول الاسماء تعمل من أجلها git أو برامج أخرى بخلاف ssh.

لقد صفعتُ سويّة وقذرة معًا ، لكن قد ترغب في تحسينها.

أضف هذا إلى حسابك ~/.bashrc

mkdir -p ~/.ssh/config.d/
[ -e ~/.ssh/config ] && mv ~/.ssh/config ~/.ssh/config.bak.$(date -Ins)
cat ~/.ssh/config.d/* > ~/.ssh/config

في كل مرة تبدأ فيها جلسة ، سيتم دمج كل الملفات في ~/.ssh/config.d. (السطر 3)

الجانب السلبي مع هذا الإصدار هو أنه إذا قمت بتغيير ~/.ssh/config الجلسة القادمة تفتح فتح التغييرات الخاصة بك ، لذلك لمنع ذلك نقل الملف الموجود إلى ملف. bak. (السطر 2) المشكلة هي أنك ستحصل على الكثير من ملفات .bak بعد فترة.


2
2018-05-19 09:45



ممتاز مع إضافة بعض is_anything_changed شرط - vp_arth


يمكنك بسهولة ترقية إصدار SSH على Ubuntu إلى الإصدار v7.3 (تم اختباره على Ubuntu Xenial 16.04) عن طريق تثبيت الحزم من Yakkety:

echo "deb http://archive.ubuntu.com/ubuntu yakkety main" > /etc/apt/sources.list.d/yakkety.list
apt-get update
apt-get install -y ssh
rm /etc/apt/sources.list.d/yakkety.list
apt-get update

تحقق من إصدار SSH

ssh -V
OpenSSH_7.3p1 Ubuntu-1, OpenSSL 1.0.2g 1 Mar 2016

يتضمن تكوين SSH للاستخدام من دليل ~ / .ssh / config.d

mkdir ~/.ssh/config.d
sed -i '1iInclude config.d/*' ~/.ssh/config

1
2018-03-21 13:57