SSH에서 Mac 그래픽 로그인 유도


16

SSH에서 Mac 그래픽 로그인을 어떻게 유도합니까? loginwindowMac OS X에서 관리자로 SSH를 통해 원격으로 로그인 한 경우 명령을 실행 하여 프로세스가 사용자 세션을 시작 하도록하는 방법이 있습니까?

컴퓨터가 로그인 창에있을 때 (현재 로그인 한 사용자가 없음) 사용자 이름을 클릭하고 암호를 입력 한 것처럼 사용자 세션을 열기를 원합니다.

GUI 스크립팅과 관련이없는 솔루션이 선호되지만 이 Apple KB 페이지 는 해당 경로를 찾는 사람들에게 흥미로울 수 있습니다.

답변:


4

암호를 모르면 문제가 복잡해 지지만 해결책은 다음과 같습니다. 일시적으로 사용자 암호를 비울 수 있습니까? (그리고 나중에 이전의 것으로 재설정하십시오.)

시작으로 :

먼저 로그인 창을 표시하십시오. 현재 사용자를 로그 아웃하거나 빠른 사용자 전환을 사용하거나 SSH를 사용하십시오.

cd "/ 시스템 / 라이브러리 / CoreServices / 메뉴 엑스트라 /User.menu/Contents/Resources/"
sudo ./CGSession -suspend

또는 특정 사용자로 바로 전환하려면 로그인 창이 표시 될 수 있습니다 (10.5 Leopard에서 더 이상 작동하지 않음).

sudo ./CGSession -switchToUserID 501

표시되는 내용은 시스템 환경 설정에 따라 약간 씩 다르지만 사용자 아이콘과 이름이라고 가정하겠습니다. 이름을 활성화하려면 첫 글자를 입력해야합니다. 그런 다음 Return 후에 비밀번호 프롬프트가 표시됩니다. 또는 하나를 선택할 수 있는 (아래쪽 화살표를 눌러 같은) 이름을 누른 다음를 모두 입력하라는 메시지가 표시되도록 옵션-Return 키를 누르십시오 어떤 사용자 이름과 암호를 입력합니다. 어떤 화면이 표시되는지 어떻게 알 수 있는지 모르겠지만 나중에 저장하도록하겠습니다.

따라서 첫 번째 (임의의) 사용자 이름을 선택하고 Option-Return을 누르고 특정 사용자 이름을 입력하고 Return 키를 누른 다음 암호를 입력하십시오.

sudo osascript -e 'tell 앱 "시스템 이벤트"
  키 코드 125
  옵션을 사용하여 키 입력 반환
  키 입력 "사용자 이름"
  지연 1.0
  키 스트로크 리턴
  지연 1.0
  키 입력 "비밀번호"
  지연 1.0
  키 스트로크 리턴
끝내라

위의 오류는 사용법을 제한하지 않는 한 일부 오류를 보여줍니다.

osascript [285] : 3891612 : (connectAndCheck) 신뢰할 수없는 앱이 아닙니다 
    로그인하기 전에 Window Server에 연결하거나 시작할 수 있습니다.
_RegisterApplication (), 기본 연결 설정 실패
    WindowServer, _CGSDefaultConnection ()이 NULL입니다.

또는 " Apple Remote Desktop을 통해 로그인 창 스크립트 "의 언어 별 스크립트를 사용하십시오 (언젠가 해당 사이트의 주석이 더 나은 솔루션을 표시 할 수 있음).

프로세스에게 "SecurityAgent"
  창 1의 그룹 1의 텍스트 필드 1의 값을 "사용자 이름"으로 설정
  창 1의 그룹 1의 텍스트 필드 2의 값을 "암호"로 설정
말하다
애플리케이션 프로세스 "SecurityAgent"의 창 1의 "로그인"단추를 클릭하십시오.

그러나 주요 문제는 여전히 암호가 필요하다는 것 입니다. 그러나 사용자가 빈 암호를 가지고 있으면 분명히 암호가 필요하지 않습니다. 실제로 빈 암호의 경우 사용자 아이콘을 클릭하기 만하면됩니다. 따라서 AppleScript를 사용하여 키 스트로크를 전송하는 것이 허용되는 경우 "모두"가 남아있을 수 있습니다.

  • 해당 비밀번호를 모른 채 세션을 시작하거나 다시 시작할 수 있도록 사용자 비밀번호를 일시적으로 비울 수 있습니까?

  • AppleScript를 오류 방지로 만들 수 있습니까? 처럼:

    • 로그인 창이 보이는지 확인 하는 방법 ? ( 로그인 창이 표시되는 동안 생성되므로stat -f%Su /dev/console 도움이 될 수 있습니다 )root
    • 어떤 로그인 창이 표시 되는지 확인 하는 방법 은 무엇입니까? (좋아요 : 하나는 아이콘과 로그인 이름, 드롭 다운 목록 또는 누군가 특정 사용자로 전환하도록 선택한 경우 암호 프롬프트 만 표시합니까?)
    • 지연을 제거하십시오.
    • 그 오류 메시지는 어떻습니까?

(테스트에 대한 참고 사항 : 화면 공유를 사용할 때 컴퓨터를 제어 할 때 : 암호 및 키 입력 암호화 는 로그인 창이 표시되거나 사용자가 성공적으로 로그인 한 후에도 연결을 유지하는 것으로 보입니다. 모든 네트워크 암호화를 사용하는 경우 데이터 가 표시되면 로그인이 표시되거나 사용자가 전환 될 때마다 Mac에서 화면 공유 연결을 다시 설정해야합니다.)


이것은 좋은 시작이지만 두 가지 문제가 있습니다. 첫째, 내가 원하는 로그인 창에 있으면 작동하지 않으며 선호하지 않는 암호를 묻습니다. 루트이기 때문에 암호없이 사용자를 전환 할 수 있어야합니다.
Sophie Alpert

아하. 컴퓨터 자체에 앉아있을 때 다른 사용자로 로그인하는 방법조차 모릅니다 sudo osascript -e 'tell app "System Events" to keystroke "password" & return'. 화면이 잠긴 상태에서 관리 사용자 이름과 비밀번호를 입력 하면 다른 사용자의 세션이 재개됩니다 . 그러나 암호를 모른 채 모든 사용자를 위해 세션 을 시작 하는 방법은 무엇입니까? (비밀번호를 알고 있다면, 다른 해결 방법은 화면 공유 일 수 있으며, 이는 로그인 화면에서도 작동합니다. 특정 사용자 세션이 시작되거나 재개 된 후 화면 공유를 다시 연결해야합니다.)
Arjan

이거 좋다 그래도 수동으로 키 스트로크를 시뮬레이션하지 않는 솔루션을 선호합니다.
Sophie Alpert

2
다른 사람을 위해 세션을 시작하는 방법을 아는 사람이 있는지 궁금합니다. 따라서 위의 답변을 고려하지 않고 매일 Mac OS X을 사용하는 경우 : 관리자는 해당 사용자의 암호를 모르고 다른 사용자로 로그인 할 수 있습니까? ( su명령 프롬프트와 같지만 GUI 세션의 경우와 동일합니다. 또는 화면이 잠겨있을 때와 마찬가지로 관리자 이름과 암호를 입력 하면 다른 사용자의 세션 이 재개됩니다 .)
Arjan

아마도 그것은 AppleScript로 keystroking없이 그것을 할 수는 없습니다 : 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가 수행하는 작업의 소스를 확인할 수 있습니다. 포트와 네임 스페이스를 설정하기 위해 Mach 루틴을 호출하기 위해 합리적인 모양의 개인 라이브러리 (libvprop의 vproc_priv.h 함수)를 사용하고 있습니다. Apple이 Mach 파생 시스템 콜에 대해 제공하는 모든 (제한된) 문서와 일치합니다.

다음으로 BSM API를 사용하여 감사 사용자 ID를 사용자의 감사 사용자 ID로 설정해야합니다. 그렇지 않으면 Lion에서 로그인 창이 표시되지 않습니다.

"launchctl blist"를 확인하면 세션이 전환 된 세션에 매우 가깝게 보이고 일부 프로세스와 서비스가 잘 작동합니다 (예 : 보드 보드 등). 실제로 Finder와 loginwindow를 제외한 모든 것이 실행되고 있습니다. 로그인 창이 실행될 때까지 그래픽 응용 프로그램을 시작할 수 없으며 세션 별 로그인 창 프로세스는 항상 전역의 직접적인 자식으로 생성됩니다. 새로운 세션에서 새 로그인 창을 시작하기 위해 로그인 창 프로세스를 어떻게 찌르는가? 마지막 조각을 제자리에 놓을 방법을 찾을 수 없습니다!

이 답변을 작성하는 데 도움을 주시면 감사하겠습니다.


0

sudo를 사용하여 명령을 실행하면 표준 사용자가 스크립트를 읽을 수 없도록 설정할 수 있습니다. 완벽하지는 않지만 관리자가 이미 손상된 경우 게임은 끝났습니다!

chmod ur 스크립트 이름

내 스크립트는 다음과 같습니다. 한 사용자가 이미 실행 중일 때 원격으로 작동하며 SSH를 통해 두 번째 사용자로 전환합니다 (Snow Leopard 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 개의 다른 워크 스테이션에 로그인해야했습니다. sudo 권한으로도 SSH 세션에서 'osascript -e ...'명령을 안정적으로 실행할 수 없었습니다. 그러나 Apple Remote Desktop을 통해 실행할 수있었습니다. ARD가있는 경우 :

  1. 기계를 선택하십시오
  2. 필요한 경우 깨우고 다른 사용자로부터 로그 아웃하십시오.
  3. "Manage"메뉴에서 "Send UNIX Command ..."를 선택하십시오
  4. Arjan의 스크립트 ( 'sudo'를 생략)를 명령 대화 상자에 붙여 넣기
  5. "Run command as User : root"를 선택하고 입력하십시오.

1 분 이내에 Finder를 실행하는 25 개의 Mac Mini를 모두 찾을 수있어 기뻤습니다. ARD를 사용하면 모든 컴퓨터에서 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'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.