Estou escrevendo um programa C Shell que estará fazendo su
ou sudo
ou ssh
. Todos querem suas senhas na entrada do console (o TTY), em vez de stdin ou na linha de comando.
Alguém conhece uma solução?
A configuração sem senha sudo
não é uma opção.
Espero pode ser uma opção, mas não está presente no meu sistema simplificado.
Respostas:
Para sudo, existe uma opção -S para aceitar a senha da entrada padrão. Aqui está a entrada do homem:
Isso permitirá que você execute um comando como:
Quanto ao ssh, fiz muitas tentativas para automatizar / script seu uso sem sucesso. Não parece haver nenhuma maneira incorporada de passar a senha para o comando sem avisar. Como outros já mencionaram, o utilitário " expect " parece ter como objetivo solucionar esse dilema, mas, em última análise, configurar a autorização correta de chave privada é o caminho correto a seguir ao tentar automatizar isso.
fonte
nonroot:[email protected]
? Obviamente, as coisas serão muito mais fáceis se você usar a autenticação de chaves e o gerenciador de chaves.'cat pw | sudo -S <command>
e mais tarderm pw
.nc -l 12345 | sudo -S <command>
. No lado de envio;echo myPassord | nc <target> 12345
. Isso apenas move o problema de manipulação de senha, mas presumivelmente para um console mestre onde você tem mais opções.Eu escrevi um Applescript que solicita uma senha por meio de uma caixa de diálogo e cria um comando personalizado do bash, assim:
Não tenho certeza se isso ajuda.
Seria bom se o sudo aceitasse uma senha pré-criptografada, para que eu pudesse criptografá-la no meu script e não me preocupar em ecoar senhas de texto não criptografado. No entanto, isso funciona para mim e minha situação.
fonte
Para
ssh
que você pode usarsshpass
:sshpass -p yourpassphrase ssh user@host
.Você só precisa baixar o sshpass primeiro :)
fonte
Eu tenho:
Funciona para mim.
fonte
Para o sudo, você também pode fazer isso:
fonte
A solução usual para esse problema é configurar um aplicativo auxiliar que execute a tarefa que requer acesso de superusuário: http://en.wikipedia.org/wiki/Setuid
Sudo não é para ser usado offline.
Edição posterior: o SSH pode ser usado com autenticação de chave pública-privada. Se a chave privada não tiver uma senha, o ssh poderá ser usado sem solicitar uma senha.
fonte
Isso pode ser feito configurando chaves públicas / privadas nos hosts de destino aos quais você estará se conectando. A primeira etapa seria gerar uma chave ssh para o usuário executando o script no host local, executando:
Em seguida, digite uma senha em branco. Depois disso, copie sua chave ssh no host de destino ao qual você estará se conectando.
Depois de registrar as chaves ssh, você poderá executar um silêncio
ssh remote_user@other_host
do host local.fonte
Talvez você possa usar um
expect
comando ?:Esse comando fornece a senha automaticamente.
fonte
Quando não há melhor escolha (como sugerido por outros), o homem socat pode ajudar:
Toda a complexidade pty, setsid e ctty é necessária e, embora você não precise dormir por muito tempo, precisará dormir. A opção echo = 0 também vale uma olhada, assim como passar o comando remoto na linha de comando do ssh.
fonte
su
também.su
não possui uma opção -S (stdin).Dê uma olhada
expect
utilitário linux.Ele permite enviar saída para o stdio com base na correspondência simples de padrões no stdin.
fonte
Configure o SSH para Autenticação de Chave Pública, sem uma senha na chave. Cargas de guias na rede. Você não precisará de uma senha para fazer login. Você pode limitar as conexões para uma chave com base no nome do host do cliente. Fornece segurança razoável e é excelente para logins automatizados.
fonte
fonte
Eu tive o mesmo problema. script de diálogo para criar diretório no PC remoto. diálogo com ssh é fácil. Eu uso o sshpass (instalado anteriormente).
saudações da Alemanha
titus
fonte
Com base na resposta de @ Jahid, isso funcionou para mim no macOS 10.13:
fonte
uma
sshpass
alternativa melhor é:passh
https://github.com/clarkwang/passhEfetue login em um servidor remoto
Execute um comando no servidor remoto
outros métodos para passar a senha
aqui expliquei por que é melhor que o sshpass e outras soluções.
fonte
Isso está funcionando.
fonte
su
, que lê a senha do stdio .Codificar uma senha em um script expect é o mesmo que ter um sudo sem senha, na verdade pior, já que o sudo ao menos registra seus comandos.
fonte
Uma maneira seria usar a opção read -s. Dessa forma, os caracteres da senha não serão repetidos na tela. Eu escrevi um pequeno script para alguns casos de uso e você pode vê-lo no meu blog: http://www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/
fonte
USAR:
Exemplo:
Espero que ajude..
fonte
Você pode fornecer a senha como parâmetro para esperar o script.
fonte
Espero que seja útil.
fonte