اتبع pids عبر الآلات (SSH)
سؤال
أحاول أساسا كتابة أمر يشبه PSTEE إلا أنه يجب أن يتبع العمليات عبر الآلات.
ما أعنيه هو أنه إذا قمت بتشغيل هذا:
$ ssh $node sleep 1000
ثم يجب أن يعرض الأمر شيئا مثل هذا:
ssh $node -- ($node) sleep 1000
وإذا كنت قيد التشغيل:
$ ssh $node ssh $node sleep 1000
ssh $node---($node) ssh $node---($node) sleep 1000
وهلم جرا ...
سؤالي هو: كيف يمكنني تعيين جلسة SSH واحدة على جهاز واحد إلى عملية مستأجرة على جهاز آخر؟
العمليات المحلية والطفل المحلية ليست مشكلة، ولكن كيف يمكنني معرفة الأمر SSH على عقدة واحدة أثار عملية أخرى على عقدة أخرى.
لينكس 2.6.18.
افتتح فقط للأشياء "عن بعد". تشغيل OPENSSH_4.3P2 حاليا.
SSH الوصول إلى جميع العقد بالطبع (المصادقة الرئيسية القائمة) لذلك المتاحة PS و Netstat من جميع العقد.
Linux - فقط "الخارقة" على ما يرام، لا تحتاج إلى أن تكون محمولة على الرغم من أنها ستكون مكافأة إضافية بالطبع.
سيكون المستخدم دائما هو نفسه كما أن الأمر / البرنامج النصي يعمل بهذا المستخدم. هذا المستخدم ليس جذر.
لا يجب أن تكون سريعة، دقيقة فقط.
الحل التلقائي سيكون لكتابة pstree
استنساخ، يؤدي ذلك إلى سلسلة الأوامر "ssh
"، أرقام منفذ المصدر ثم يذهب إلى الجهاز البعيد في السؤال والأرقام التي واحدة منها sshd
الأطفال الذين تم طرحهم من قبل هذا الأمر بالذات.
ولكن ربما هناك طريقة أكثر ذكاء؟ : P.
المحلول
في الواقع، أعتقد أن الحل التلقائي الخاص بك هو الطريقة الصحيحة للقيام بذلك: استخدم Netstat للحصول على منفذ المصدر والبحث عنه على الجهاز البعيد. قد تواجه مشكلة في استخدام "Netstat -p" دون جذر - لقد جربته على جهازين، واحد كان سعيدا لإظهار العمليات الخاصة بي وواحد لم يكن كذلك.
بالإضافة إلى عملاء SSH، قد تمتد هذا للبحث عن عملاء آخرين يستخدمون اتصالات SSH، مثل RSYNC أو Mercurial. فقط احرص على عدم تتبع اتصال البرنامج الخاص بك بشكل متكرر!
تظهر تجربة سريعة مع Netstat و Pstre أن الفكرة صوتي:
me@mymachine:~$ netstat -p
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 mymachine.example:43681 remote.example.com:ssh ESTABLISHED 27044/ssh
tcp 0 0 mymachine.example:39228 remote.example.com:ssh ESTABLISHED 14499/ssh
tcp 0 0 mymachine.example:45814 remote.example.com:ssh ESTABLISHED 20899/ssh
me@mymachine:~$ ssh remote netstat -p | grep mymachine.example:43681
tcp 0 0 remote.example.com:ssh mymachine.example:43681 ESTABLISHED 10361/1
me@mymachine:~$ ssh remote pstree -a 10361
sshd
`-grep -n -e wotsit -i -R /local/home/me/somewhere /dev/null
سأكون مهتما برؤية النتيجة، لأنه سيكون مفيدا جدا بالنسبة لي!