SSH से मैक ग्राफिकल लॉगिन का संकेत दें


16

मैं SSH से मैक ग्राफिकल लॉगिन को कैसे प्रेरित करूं? क्या loginwindowमैक ओएस एक्स पर एक व्यवस्थापक के रूप में एसएसएच के माध्यम से दूरस्थ रूप से लॉग इन करने पर एक कमांड चलाकर उपयोगकर्ता सत्र शुरू करने का एक तरीका है ?

जब मशीन लॉगिन विंडो पर होती है (कोई उपयोगकर्ता वर्तमान में लॉग इन नहीं है), मैं चाहता हूं कि यह उपयोगकर्ता के सत्र को खोल दे जैसे कि मैंने उपयोगकर्ता नाम पर क्लिक किया था और पासवर्ड दर्ज किया था।

GUI की स्क्रिप्टिंग में शामिल न होने वाले समाधानों को बहुत अधिक पसंद किया जाता है, लेकिन यह Apple KB पृष्ठ उन लोगों के लिए रुचि का हो सकता है जो उस मार्ग पर जाते हैं।

जवाबों:


4

पासवर्ड न जानने से चीजें जटिल हो जाती हैं, लेकिन शायद समाधान यह है: क्या उपयोगकर्ता के पासवर्ड को अस्थायी रूप से खाली करना संभव है? (और बाद में इसे पहले जो कुछ भी है उसे रीसेट करें।)

एक शुरुआत के रूप में:

सबसे पहले, लॉगिन विंडो प्रदर्शित करने के लिए प्राप्त करें। बस वर्तमान उपयोगकर्ता को लॉग आउट करें, तेज़ उपयोगकर्ता स्विचिंग का उपयोग करें, या SSH का उपयोग करें:

सीडी "/ प्रणाली / पुस्तकालय / CoreServices / मेनू अतिरिक्त / User.menu / सामग्री / संसाधन /"
sudo ./CGSession -suspend

या, तुरंत किसी विशिष्ट उपयोगकर्ता पर स्विच करने के लिए, जो शायद लॉगिन विंडो दिखाएगा (यह अचानक मेरे 10.5 तेंदुए पर काम नहीं करता है):

sudo ./CGSession -switchToUserID 501

अब जो दिखाया गया है वह सिस्टम प्रेफरेंस पर थोड़ा निर्भर करता है, लेकिन मान लें कि यह यूजर्स के आइकॉन और उनके नाम हैं। एक नाम को सक्रिय करने के लिए हमें पहले अक्षर लिखने होंगे। फिर, रिटर्न के बाद, पासवर्ड संकेत दिखाता है। वैकल्पिक रूप से कोई भी नाम चुन सकता है (जैसे एरो डाउन दबाकर) और फिर किसी भी उपयोगकर्ता नाम और पासवर्ड के लिए संकेत दिए जाने वाले विकल्प-रिटर्न को दबाएं । मुझे नहीं पता कि कोई कैसे बता सकता है कि कौन सी स्क्रीन दिखाई गई है, लेकिन चलो बाद के लिए इसे बचाएं ...

तो, पहले (यादृच्छिक) उपयोगकर्ता नाम का चयन करने के लिए और विकल्प-वापसी दबाएं, एक विशिष्ट उपयोगकर्ता नाम टाइप करें, रिटर्न भरें, और पासवर्ड टाइप करें:

sudo osascript -e 'ऐप बताएं "सिस्टम इवेंट्स"
  कुंजी कोड 125
  नीचे विकल्प का उपयोग करके कीस्ट्रोक वापस करें
  कीस्ट्रोक "उपयोगकर्ता नाम"
  देरी 1.0
  कीस्ट्रोक वापसी
  देरी 1.0
  कीस्ट्रोक "पासवर्ड"
  देरी 1.0
  कीस्ट्रोक वापसी
अंत बताओ '

उपरोक्त कुछ त्रुटि दिखाती है, जो जहाँ तक मैं बता सकता हूँ उपयोग को सीमित नहीं करता है:

ऑसस्क्रिप्ट [285]: ३16 ९ १६१२: (कनेक्टएंडचेक) अविश्वासित ऐप्स नहीं हैं 
    लॉगिन से पहले विंडो सर्वर से कनेक्ट या लॉन्च करने की अनुमति दी गई है।
_RegisterApplication (), डिफ़ॉल्ट कनेक्शन को स्थापित करने में विफल
    विंडोस्वर, _CGSDefaultConnection () NULL है।

वैकल्पिक रूप से, " स्क्रिप्ट को लॉगिन विंडो से Apple रिमोट डेस्कटॉप के माध्यम से भाषा विशिष्ट स्क्रिप्ट का उपयोग करें " (हो सकता है कि एक दिन उस साइट पर टिप्पणियां बेहतर समाधान दिखाएंगी):

प्रक्रिया "SecurityAgent" बताएं
  "उपयोगकर्ता नाम" के लिए विंडो 1 के समूह 1 के पाठ क्षेत्र 1 का मान सेट करें
  "पासवर्ड" के लिए विंडो 1 के समूह 1 के टेक्स्ट फ़ील्ड 2 का मान सेट करें
अंत बताओ
आवेदन प्रक्रिया "SecurityAgent" के बटन 1 पर "लॉग इन" बटन पर क्लिक करें

लेकिन मुख्य समस्या यह है: इसके लिए अभी भी पासवर्ड की आवश्यकता है । हालाँकि: स्पष्ट रूप से कोई पासवर्ड की आवश्यकता नहीं है जब उपयोगकर्ता के पास खाली पासवर्ड हो। वास्तव में, खाली पासवर्ड के लिए सिर्फ एक उपयोगकर्ता के आइकन पर क्लिक करना आवश्यक है। इसलिए, यदि AppleScript का उपयोग करके कीस्ट्रोक्स भेजना स्वीकार्य है, तो हो सकता है कि "सभी" जो कि पता लगाना बाकी है:

  • क्या उपयोगकर्ता के पासवर्ड को अस्थायी रूप से खाली करना संभव है, उस पासवर्ड को जाने बिना सत्र शुरू करने (या फिर से शुरू करने) की अनुमति देने के लिए ...?

  • क्या कोई AppleScript त्रुटि-प्रमाण बना सकता है? पसंद:

    • लॉगिन विंडो दिखाई दे तो कैसे बताएं ? (शायद stat -f%Su /dev/consoleमदद कर सकते हैं, क्योंकि पैदावारroot खिड़की प्रदर्शित होने पर पैदावार होती है)
    • कैसे बताएं कि कौन सी लॉगिन विंडो दिखाई गई है? (जैसे: कोई आइकन और लॉगिन नाम, या ड्रॉपडाउन सूची दिखा रहा है, या शायद केवल एक पासवर्ड प्रॉम्प्ट यदि कोई व्यक्ति किसी अन्य उपयोगकर्ता पर स्विच करने के लिए चुना गया है?)
    • देरी से छुटकारा।
    • उस त्रुटि संदेश के बारे में क्या?

(परीक्षण के लिए एक नोट: स्क्रीन शेयरिंग का उपयोग करते समय ऐसा लगता है कि वरीयताएँ निर्धारित करते समय कंप्यूटर को नियंत्रित करना: पासवर्ड और कीस्ट्रोक को एन्क्रिप्ट करना केवल लॉगिन विंडो दिखाए जाने पर या उपयोगकर्ता द्वारा सफलतापूर्वक लॉग-इन करने के बाद भी कनेक्शन को बनाए रखता है। जब सभी नेटवर्क का उपयोग करें एन्क्रिप्ट करेंडेटा तब मेरे मैक को हर बार स्क्रीन शेयरिंग कनेक्शन को फिर से स्थापित करने की आवश्यकता होती है जब कोई लॉगिन दिखाया जाता है या उपयोगकर्ता स्विच किया जाता है।)


यह एक अच्छी शुरुआत है, लेकिन इसकी दो समस्याएं हैं। सबसे पहले, यह काम नहीं करता है यदि आप लॉगिन विंडो पर हैं, जो कि मैं चाहता था, और यह एक पासवर्ड के लिए पूछता है, जिसे मैं पसंद करूंगा। चूंकि यह रूट है, यह उपयोगकर्ताओं को पासवर्ड के बिना स्विच करने में सक्षम होना चाहिए।
सोफी अल्परट

अहा। मैं यह भी नहीं जानता कि कंप्यूटर पर बैठते ही दूसरे उपयोगकर्ता के रूप में कैसे लॉगिन किया जाए, इसलिए इसके लिए कोई सिगार नहीं हैsudo osascript -e 'tell app "System Events" to keystroke "password" & return' । स्क्रीन लॉक होने के साथ, एक प्रशासनिक उपयोगकर्ता नाम और पासवर्ड दर्ज करना दूसरे उपयोगकर्ता के सत्र को फिर से शुरू करता है। लेकिन पासवर्ड जाने बिना किसी भी उपयोगकर्ता के लिए सत्र कैसे शुरू करें? (बस सुनिश्चित करें, यदि आप पासवर्ड जानते हैं: एक और समाधान स्क्रीन शेयरिंग हो सकता है, जो लॉगिन स्क्रीन के लिए भी काम करता है। आपको एक विशिष्ट उपयोगकर्ता सत्र शुरू होने या फिर से शुरू होने के बाद स्क्रीन शेयरिंग को फिर से कनेक्ट करना होगा।)
अर्जन

यह अच्छा है। मैं मैन्युअल रूप से कीस्ट्रोक्स का अनुकरण किए बिना एक समाधान पसंद करूंगा।
सोफी अल्परट

2
मुझे आश्चर्य है कि अगर किसी को पता है कि किसी और के लिए सत्र कैसे शुरू किया जाए। तो, उपरोक्त जवाब पर विचार किए बिना, बस मैक ओएस एक्स के दैनिक उपयोग में: क्या कोई प्रशासक उस उपयोगकर्ता के पासवर्ड को जाने बिना किसी अन्य उपयोगकर्ता के रूप में लॉग इन कर सकता है? (जैसे suकमांड प्रॉम्प्ट पर, लेकिन फिर GUI सत्र के लिए। या जैसे स्क्रीन लॉक होने पर, किसी प्रशासनिक उपयोगकर्ता नाम और पासवर्ड को फिर से शुरू करना करना अन्य उपयोगकर्ता के सत्र को से करता है।)
Arjan

शायद AppleScript कीस्ट्रोकिंग के बिना ऐसा करना संभव नहीं है: docs.info.apple.com/article.html?path=RemoteDesktop/3.0/en/…
सोफी

1

मैं हाल ही में इसकी जांच कर रहा हूं।

इसे अपने ऐप के PAM स्टैक में रखें, या sshd के साथ परीक्षण करें:

session    required       pam_launchd.so launchd_session_type=Aqua

यह आपको एक ग्राफिकल सत्र प्राप्त करने की दिशा में एक लंबा रास्ता तय करता है जो स्विच-आउट उपयोगकर्ता सत्र के बहुत करीब है। विशेष रूप से, यह सही बूटस्ट्रैप नामस्थान में है और इसमें सही बूटस्ट्रैप पोर्ट हैं (मुझे लगता है)। आप pam_launchd क्या करता है के लिए स्रोत की जांच कर सकते हैं; पोर्ट्स और नेमस्पेस सेट करने के लिए माच रूटीन को कॉल करने के लिए यह कुछ उचित दिखने वाली निजी लाइब्रेरी (libproprop में vproc_priv.h फ़ंक्शन) का उपयोग कर रहा है। यह मच-व्युत्पन्न syscalls के लिए Apple द्वारा प्रदान किए गए सभी (सीमित) डॉक्स के साथ मेल खाता है।

इसके बाद, आपको अपनी ऑडिट यूजर-आईडी को बीएसएम एपीआई के साथ उपयोगकर्ता के लिए सेट करने की आवश्यकता है, या लॉगिनविंडो शेर पर आपसे बात नहीं करेगा।

यदि आप "लॉन्चर ब्लास्ट" की जाँच करते हैं तो सत्र एक स्विच-आउट सत्र के बहुत करीब दिखता है, और कुछ प्रक्रियाएँ और सेवाएँ अच्छी तरह से जीवन में आती हैं (जैसे पेस्टबोर्ड, और इसी तरह)। वास्तव में, फाइंडर और लॉगिनविंडो को छोड़कर सब कुछ चल रहा है। जब तक लॉगिनविंडो नहीं चलता, तब तक आप एक ग्राफिकल एप्लिकेशन लॉन्च नहीं कर सकते हैं, और प्रति सत्र लॉगिनविंडो प्रक्रिया को हमेशा वैश्विक एक के प्रत्यक्ष बच्चे के रूप में देखा जाता है। नए सत्र में नए लॉगिनविंडो को लॉन्च करने के लिए लोग लॉगिनविंडो प्रक्रिया को कैसे रोक सकते हैं? मैं जगह में अंतिम टुकड़ा पाने के लिए एक रास्ता नहीं मिल सकता है!

इस उत्तर को पूरा करने में कोई भी मदद मिली है।


0

सूडो के साथ कमांड चलाने से आप मानक उपयोगकर्ताओं द्वारा अपठनीय करने के लिए स्क्रिप्ट सेट कर सकते हैं। यह सही नहीं है, लेकिन यदि आपका व्यवस्थापक उपयोगकर्ता पहले से ही समझौता कर चुका है, तो खेल वैसे भी खत्म हो गया है!

chmod ur scriptname

मेरी स्क्रिप्ट इस तरह दिखती है, यह दूर से काम करती है जब एक उपयोगकर्ता पहले से ही चल रहा है, एसएसएच के माध्यम से दूसरे उपयोगकर्ता पर स्विच करने के लिए (स्नो लेपर्ड 10.6.3 पर परीक्षण):

#!/bin/bash
#go to login window
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID 503

osascript -e 'tell app "System Events"
keystroke "password"
  delay 1.0
  keystroke return
end tell'

exit

0

सॉफ्टवेयर अपडेट करने के लिए मुझे एक ही उपयोगकर्ता को 25 अलग-अलग वर्कस्टेशनों में लॉग इन करना होगा। मैं SSH सत्रों से विश्वसनीय रूप से 'ऑसस्क्रिप्ट-ई ...' कमांड को चलाने में सक्षम नहीं था, यहां तक ​​कि सूडो विशेषाधिकारों के साथ भी। हालाँकि, मैं इसे Apple रिमोट डेस्कटॉप के माध्यम से चलाने में सक्षम था। यदि आपके पास एआरडी है:

  1. अपनी मशीनों का चयन करें
  2. यदि आवश्यक हो तो उन्हें जगाएं और अन्य उपयोगकर्ताओं से लॉग आउट करें
  3. "प्रबंधित करें" मेनू से "भेजें UNIX कमांड ..." चुनें
  4. कमांड डायलॉग बॉक्स में अर्जन की स्क्रिप्ट ('सुडो' शब्द को छोड़ते हुए) को चिपकाएँ
  5. चुनें और "कमांड चलाएँ: उपयोगकर्ता: रूट" दर्ज करें

मैं एक मिनट से भी कम समय के भीतर सभी 25 मैक मिनिस को फाइंडर को उपयोगकर्ता के रूप में पाकर बहुत खुश था। बस दोहराना, एआरडी के साथ आपको हर मशीन पर sudo पासवर्ड टाइप करने की जरूरत नहीं है। कमांड डायलॉग में आपको जिन लाइनों को चिपकाना है, वे हैं (एक मान्य उपयोगकर्ता नाम और पासवर्ड का प्रतिस्थापन):

osascript -e 'tell app "System Events"
  key code 125
  keystroke return using option down
  keystroke "the username"
  delay 1.0
  keystroke return
  delay 1.0
  keystroke "the password"
  delay 1.0
  keystroke return
end tell'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.