Tạo Mac đăng nhập đồ họa từ SSH


16

Làm cách nào để tạo thông tin đăng nhập đồ họa Mac từ SSH? Có cách nào để làm cho loginwindowquá trình bắt đầu phiên người dùng bằng cách chạy lệnh khi đăng nhập từ xa qua SSH với tư cách quản trị viên trên Mac OS X không?

Khi máy ở cửa sổ đăng nhập (hiện tại không có người dùng nào đăng nhập), tôi muốn nó mở phiên của người dùng như thể tôi đã nhấp vào tên người dùng và nhập mật khẩu.

Các giải pháp không liên quan đến kịch bản GUI được ưu tiên cao, nhưng trang Apple KB này có thể được quan tâm cho những người đi theo con đường đó.

Câu trả lời:


4

Không biết mật khẩu làm cho mọi thứ trở nên phức tạp, nhưng có lẽ giải pháp là: có thể tạm thời xóa mật khẩu của người dùng không? (Và sau đó đặt lại nó thành bất cứ điều gì trước đây.)

Khi bắt đầu:

Đầu tiên, lấy cửa sổ đăng nhập để hiển thị. Chỉ cần đăng xuất người dùng hiện tại, sử dụng chuyển đổi người dùng nhanh hoặc sử dụng SSH:

cd "/ Hệ thống / Thư viện / CoreService / Menu Extras / User.menu / Nội dung / Tài nguyên /"
sudo ./CGSession -suspend

Hoặc, để chuyển sang một người dùng cụ thể ngay lập tức, có thể sẽ hiển thị cửa sổ đăng nhập (điều này đột nhiên không còn hoạt động trên 10.5 Leopard của tôi):

sudo ./CGSession -switchToUserID 501

Những gì hiển thị bây giờ phụ thuộc một chút vào Tùy chọn hệ thống, nhưng giả sử đó là biểu tượng của người dùng và tên của họ. Để kích hoạt tên, chúng ta phải nhập các chữ cái đầu tiên. Sau đó, sau khi trả về, dấu nhắc mật khẩu hiển thị. Ngoài ra người ta có thể chọn bất kỳ tên (như bằng cách nhấn mũi tên Down) và sau đó nhấn Option-Return to được nhắc nhở cho cả bất kỳ tên truy cập và mật khẩu của mình. Tôi không biết làm thế nào người ta có thể biết màn hình nào được hiển thị, nhưng hãy để dành màn hình đó sau ...

Vì vậy, để chọn tên người dùng (ngẫu nhiên) đầu tiên và nhấn Option-Return, nhập tên người dùng cụ thể, nhấn Return và nhập mật khẩu:

sudo osascript -e 'nói với ứng dụng "Sự kiện hệ thống"
  mã khóa 125
  tổ hợp phím trở lại bằng cách sử dụng tùy chọn xuống
  tổ hợp phím "tên người dùng"
  độ trễ 1.0
  tổ hợp phím trở lại
  độ trễ 1.0
  tổ hợp phím "mật khẩu"
  độ trễ 1.0
  tổ hợp phím trở lại
kết thúc

Ở trên cho thấy một số lỗi, mà theo như tôi có thể nói không giới hạn việc sử dụng:

osascript [285]: 3891612: (connectAndCheck) Các ứng dụng không đáng tin cậy không phải là 
    được phép kết nối hoặc khởi chạy Window Server trước khi đăng nhập.
_RegisterApplication (), FAILED để thiết lập kết nối mặc định tới
    WindowServer, _CGSDefaultConnection () là NULL.

Ngoài ra, sử dụng tập lệnh cụ thể về ngôn ngữ từ " Script cửa sổ Đăng nhập thông qua Apple Remote Desktop " (có thể một ngày nào đó các nhận xét tại trang web đó sẽ hiển thị một giải pháp tốt hơn):

nói quá trình "SecurityAgent"
  đặt giá trị của trường văn bản 1 của nhóm 1 của cửa sổ 1 thành "tên người dùng"
  đặt giá trị của trường văn bản 2 của nhóm 1 của cửa sổ 1 thành "mật khẩu"
kết thúc
nhấp vào nút "Đăng nhập" của cửa sổ 1 của quy trình ứng dụng "SecurityAgent"

Nhưng vấn đề chính là: điều này vẫn cần mật khẩu . Tuy nhiên: rõ ràng không cần mật khẩu khi người dùng có mật khẩu trống. Trên thực tế, đối với mật khẩu trống, chỉ cần nhấp vào biểu tượng người dùng là tất cả những gì cần thiết. Vì vậy, nếu việc gửi tổ hợp phím bằng AppleScript là chấp nhận được, thì có thể "tất cả" còn lại để tìm ra:

  • Có thể tạm thời xóa mật khẩu của người dùng, để cho phép bắt đầu (hoặc tiếp tục lại) phiên mà không biết mật khẩu đó ...?

  • Người ta có thể làm cho AppleScript chống lỗi không? Giống:

    • Làm thế nào để nói nếu cửa sổ đăng nhập là có thể nhìn thấy? (có stat -f%Su /dev/consolethể có thể giúp, vì điều đó mang lạiroot trong khi cửa sổ đăng nhập được hiển thị)
    • Làm thế nào để biết đó đăng nhập cửa sổ được hiển thị? (Giống như: một biểu tượng hiển thị và tên đăng nhập hoặc danh sách thả xuống hoặc có thể chỉ là một dấu nhắc mật khẩu nếu ai đó được chọn để chuyển sang một số người dùng cụ thể?)
    • Loại bỏ sự chậm trễ.
    • Còn thông báo lỗi đó thì sao?

(Lưu ý khi kiểm tra: khi sử dụng Chia sẻ màn hình, có vẻ như cài đặt tùy chọn Khi điều khiển máy tính: Mã hóa mật khẩu và tổ hợp phím chỉ giữ lại kết nối khi cửa sổ đăng nhập được hiển thị hoặc sau khi người dùng đăng nhập thành công. Khi sử dụng Mã hóa tất cả mạng dữ liệu sau đó máy Mac của tôi cần thiết lập lại kết nối Chia sẻ màn hình mỗi khi đăng nhập được hiển thị hoặc người dùng được chuyển đổi.)


Đây là một khởi đầu tốt, nhưng nó có hai vấn đề. Đầu tiên, nó không hoạt động nếu bạn đang ở cửa sổ đăng nhập, đó là điều tôi muốn và nó yêu cầu mật khẩu, điều mà tôi thích hơn là không có. Vì nó là root nên nó có thể chuyển đổi người dùng mà không cần mật khẩu.
Sophie Alpert

Aha. Tôi thậm chí không biết cách đăng nhập như một người dùng khác khi ngồi vào máy tính, vì vậy không có điếu xì gà nào sudo osascript -e 'tell app "System Events" to keystroke "password" & return'. Khi màn hình bị khóa, nhập tên người dùng và mật khẩu quản trị sẽ tiếp tục phiên của người dùng khác. Nhưng làm thế nào để bắt đầu một phiên cho bất kỳ người dùng nào mà không biết mật khẩu? (Chỉ cần chắc chắn, nếu bạn biết mật khẩu: một cách giải quyết khác có thể là Chia sẻ màn hình, cũng hoạt động cho màn hình đăng nhập. Bạn sẽ cần kết nối lại Chia sẻ màn hình sau khi một phiên người dùng cụ thể được bắt đầu hoặc tiếp tục.)
Arjan

Điều này là tốt Tuy nhiên, tôi thích một giải pháp hơn mà không cần mô phỏng tổ hợp phím.
Sophie Alpert

2
Tôi tự hỏi nếu có ai biết làm thế nào để bắt đầu một phiên cho người khác. Vì vậy, không cần xem xét câu trả lời ở trên, chỉ trong việc sử dụng hàng ngày của Mac OS X: quản trị viên có thể đăng nhập với tư cách người dùng khác mà không cần biết mật khẩu của người dùng đó không? (Giống như sutrên dấu nhắc lệnh, nhưng sau đó cho phiên GUI. Hoặc giống như khi màn hình bị khóa, khi nhập tên người dùng và mật khẩu quản trị sẽ tiếp tục phiên của người dùng khác.)
Arjan

Có lẽ bạn không thể làm điều đó nếu không có tổ hợp phím AppleScript: docs.info.apple.com/article.html?path=RemoteDesktop/3.0/en/iêu
Sophie Alpert

1

Tôi đã điều tra gần đây.

Đặt cái này trong ngăn xếp PAM của ứng dụng của bạn hoặc thử nghiệm với sshd:

session    required       pam_launchd.so launchd_session_type=Aqua

Điều đó đi một chặng đường dài hướng tới việc mang đến cho bạn một phiên đồ họa khá gần với phiên người dùng đã chuyển đổi. Đặc biệt, nó nằm trong không gian tên bootstrap đúng và có các cổng bootstrap chính xác (tôi nghĩ). Bạn có thể kiểm tra nguồn cho những gì pam_launchd làm; đó là sử dụng một số thư viện riêng có giao diện hợp lý (các hàm vproc_priv.h trong libvprop) để gọi các thường trình Mach để thiết lập các cổng và không gian tên. Nó phù hợp với tất cả các tài liệu (giới hạn) mà Apple cung cấp cho các tòa nhà có nguồn gốc Mach.

Tiếp theo, bạn cần đặt id người dùng kiểm toán của mình thành id của người dùng bằng API BSM hoặc thông tin đăng nhập sẽ không nói chuyện với bạn trên Lion.

Phiên này trông rất gần với phiên chuyển đổi ngay bây giờ nếu bạn kiểm tra "launchctl blist", và một số quy trình và dịch vụ trở nên độc đáo (như bảng điều khiển, v.v.). Trong thực tế, tất cả mọi thứ ngoại trừ Finder và loginwindow đang chạy. Cho đến khi loginwindow chạy, bạn không thể khởi chạy một ứng dụng đồ họa và quá trình loginwindow mỗi phiên luôn được sinh ra như một đứa con trực tiếp của ứng dụng toàn cầu. Làm thế nào để một người chọc quá trình đăng nhập để khởi động một đăng nhập mới trong phiên mới? Tôi không thể tìm ra cách để có được mảnh cuối cùng!

Bất kỳ trợ giúp hoàn thành câu trả lời này biết ơn nhận được.


0

chạy lệnh với sudo cho phép bạn đặt tập lệnh thành không thể đọc được bởi người dùng chuẩn. Nó không hoàn hảo, nhưng nếu người dùng quản trị viên của bạn đã bị xâm nhập, trò chơi sẽ kết thúc!

tên tập lệnh của chmod

tập lệnh của tôi trông như thế này, nó hoạt động từ xa khi một người dùng đang chạy, để chuyển sang người dùng thứ hai thông qua SSH (được thử nghiệm trên 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

Tôi cần phải đăng nhập cùng một người dùng vào 25 máy trạm khác nhau để thực hiện cập nhật phần mềm. Tôi không thể chạy lệnh 'osascript -e ...' một cách đáng tin cậy từ các phiên SSH, ngay cả với các đặc quyền sudo. Tuy nhiên, tôi đã có thể chạy nó thông qua Apple Remote Desktop. Nếu bạn bị ARD:

  1. chọn máy của bạn
  2. đánh thức họ và đăng xuất họ khỏi những người dùng khác, nếu cần
  3. chọn "Gửi lệnh UNIX ..." từ menu "Quản lý"
  4. dán tập lệnh của Arjan (bỏ chữ 'sudo') vào hộp thoại lệnh
  5. chọn và nhập "Chạy lệnh như: Người dùng: root"

Tôi rất vui khi tìm thấy tất cả 25 máy Mac Minis đang chạy Finder với tư cách là người dùng, trong vòng chưa đầy một phút. Chỉ cần nhắc lại, với ARD, bạn không cần phải nhập mật khẩu sudo trên mỗi máy. Các dòng bạn cần dán vào hộp thoại lệnh là (thay thế tên người dùng và mật khẩu hợp lệ):

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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.