Não saber a senha dificulta as coisas, mas talvez a solução seja: é possível apagar temporariamente a senha de um usuário? (E depois redefina-o para o que era antes.)
Para começar:
Primeiro, obtenha a janela de login para exibir. Basta sair do usuário atual, usar a troca rápida de usuário ou usar SSH:
cd "/ Sistema / Biblioteca / CoreServices / Menu Extras / User.menu / Conteúdo / Recursos /"
sudo ./CGSession -suspend
Ou, para mudar imediatamente para um usuário específico, o que provavelmente mostrará a janela de login (de repente, isso não funciona mais no meu 10.5 Leopard):
sudo ./CGSession -switchToUserID 501
O que é mostrado agora depende um pouco das Preferências do Sistema, mas vamos assumir que são os ícones dos usuários e seus nomes. Para ativar um nome, teríamos que digitar as primeiras letras. Depois, após Return, o prompt de senha é exibido. Alternativamente pode-se seleccionar qualquer nome (como pressionando seta para baixo) e pressione Option-Return to ser solicitado tanto para qualquer nome de usuário e sua senha. Eu não sei como se pode dizer qual tela é mostrada, mas vamos guardar isso para mais tarde ...
Portanto, para selecionar o primeiro nome de usuário (aleatório) e pressione Option-Return, digite um nome de usuário específico, pressione Return e digite a senha:
sudo osascript -e 'tell app "System Events"
código chave 125
retorno de tecla usando a opção para baixo
pressionamento de tecla "o nome de usuário"
atraso 1.0
retorno de pressionamento de tecla
atraso 1.0
pressionamento de tecla "a senha"
atraso 1.0
retorno de pressionamento de tecla
dizer final '
O exemplo acima mostra algum erro que, até onde eu sei, não limita o uso:
osascript [285]: 3891612: (connectAndCheck) Aplicativos não confiáveis não são
permissão para conectar ou iniciar o Windows Server antes do login.
_RegisterApplication (), FAILED TO estabelecer a conexão padrão para
o WindowServer, _CGSDefaultConnection () é NULL.
Alternativamente, use o script específico do idioma da " Script A janela de login através da Apple Remote Desktop " (talvez um dia os comentários em que o site irá mostrar uma melhor solução):
informe o processo "SecurityAgent"
defina o valor do campo de texto 1 do grupo 1 da janela 1 como "o nome de usuário"
defina o valor do campo de texto 2 do grupo 1 da janela 1 como "a senha"
fim de contar
clique no botão "Log In" da janela 1 do processo de inscrição "SecurityAgent"
Mas o principal problema é: isso ainda precisa da senha . No entanto: obviamente, nenhuma senha é necessária quando um usuário possui uma senha em branco. De fato, para senhas em branco, basta clicar no ícone de um usuário. Portanto, se o envio de pressionamentos de tecla usando o AppleScript for aceitável, talvez "tudo" seja o que resta para descobrir:
É possível anular temporariamente a senha de um usuário, permitir iniciar (ou retomar) a sessão sem saber a senha ...?
Alguém pode fazer o AppleScript à prova de erro? Gostar:
- Como saber se a janela de login está visível? (talvez
stat -f%Su /dev/console
possa ajudar, pois isso geraroot
enquanto a janela de login é exibida)
- Como saber qual janela de login é mostrada? (Como: um mostrando ícones e nomes de login, ou uma lista suspensa, ou talvez apenas uma solicitação de senha, se alguém selecionou mudar para um usuário específico?)
- Livre-se dos atrasos.
- E a mensagem de erro?
(Uma observação para o teste: ao usar o Compartilhamento de tela, parece que definir a preferência Ao controlar computadores: Criptografar senhas e pressionamentos de tecla também retém a conexão quando a janela de login é exibida ou após um usuário ter efetuado login com êxito. Ao usar Criptografar todas as redes dados , meu Mac precisa restabelecer a conexão de compartilhamento de tela cada vez que um login é exibido ou um usuário é trocado.)
sudo osascript -e 'tell app "System Events" to keystroke "password" & return'
. Com a tela bloqueada, a inserção de um nome de usuário e senha administrativos retoma a sessão do outro usuário. Mas como iniciar uma sessão para qualquer usuário sem saber a senha? (Apenas para ter certeza, se você souber a senha: outra solução alternativa pode ser o compartilhamento de tela, que também funciona para a tela de login. Você precisará reconectar o compartilhamento de tela depois que uma sessão de usuário específica for iniciada ou retomada.)su
no prompt de comando, mas depois em uma sessão da GUI. Ou como quando a tela está bloqueada, onde é inserido um nome de usuário e senha administrativos. Retoma sessão do outro usuário.)Estive investigando isso recentemente.
Coloque isso na pilha PAM do seu aplicativo ou teste com sshd:
Isso ajuda bastante a obter uma sessão gráfica bastante próxima de uma sessão de usuário alternada. Em particular, ele está no espaço para nome correto do bootstrap e possui as portas de bootstrap corretas (eu acho). Você pode verificar a fonte para o que pam_launchd faz; está usando alguma biblioteca privada de aparência razoável (funções vproc_priv.h no libvprop) para chamar as rotinas Mach para configurar as portas e o espaço para nome. Ele corresponde a todos os documentos (limitados) que a Apple fornece para os syscalls derivados do Mach.
Em seguida, você precisa definir seu ID de usuário de auditoria como o do usuário com a API BSM, ou a janela de login não falará com você no Lion.
A sessão parece muito próxima de uma sessão alternada agora, se você marcar "launchctl blist", e alguns processos e serviços ganham vida agradável (como a área de transferência, etc.). De fato, tudo, exceto o Finder e a janela de login, está em execução. Até que a janela de login seja executada, você não pode iniciar um aplicativo gráfico e o processo de janela de sessão por sessão é sempre gerado como filho direto do global. Como se cutuca o processo da janela de login para iniciar uma nova janela de login na nova sessão? Não consigo encontrar uma maneira de colocar a última peça no lugar!
Qualquer ajuda para concluir esta resposta foi recebida com gratidão.
fonte
executar o comando com sudo permite definir o script como ilegível para usuários padrão. Não é perfeito, mas se o seu usuário administrador já estiver comprometido, o jogo acabou de qualquer maneira!
chmod ur scriptname
meu script se parece com isso, funciona remotamente quando um usuário já está executando, para alternar para um segundo usuário via SSH (testado no Snow Leopard 10.6.3):
fonte
Eu precisava registrar o mesmo usuário em 25 estações de trabalho diferentes, para fazer uma atualização de software. Não consegui executar o comando 'osascript -e ...' de forma confiável a partir de sessões SSH, mesmo com privilégios de sudo. No entanto, eu era capaz de executá-lo via Apple Remote Desktop. Se você tem ARD:
Fiquei encantado ao encontrar todos os 25 Mac Minis executando o Finder como usuário, em menos de um minuto. Apenas para reiterar, com o ARD, você não precisa digitar a senha do sudo em todas as máquinas. As linhas que você precisa colar na caixa de diálogo de comando são (substituindo um nome de usuário e senha válidos):
fonte