Se você for forçado a usar um script Linux para se conectar a um recurso protegido por senha, provavelmente se sentirá desconfortável em colocar essa senha no script. OpenSSL resolve esse problema para você.
Senhas e Scripts.
Não é uma ótima idéia colocar senhas em scripts de shell. Na verdade, é uma ideia muito ruim. Se o script cair nas mãos erradas, todos que lêem podem ver o que é a senha. Mas se você é forçado a usar um script, o que mais você pode fazer?
Você pode inserir a senha manualmente quando o processo atingir esse ponto, mas se o script for executado sem supervisão, isso não funcionará. Felizmente, há uma alternativa para codificar as senhas no script. Contra-intuitivamente, usa uma senha diferente para conseguir isso, juntamente com alguma criptografia forte.
No nosso exemplo de cenário, precisamos fazer uma conexão remota com um computador Fedora Linux do nosso computador Ubuntu. Nós estaremos usando um script de shell bash para fazer uma conexão ssh para o computador fedora. O script deve ser executado sem supervisão e não queremos colocar a senha para a conta remota no script. Não podemos usar chaves SSH neste caso, porque estamos fingindo que não temos nenhum controle de controle ou administrador sobre o computador Fedora.
Nós vamos fazer uso do bem conhecido
OpenSSL Toolkit
Para lidar com a criptografia e um utilitário chamado
sshass
para alimentar a senha no comando ssh.
RELACIONADO: Como criar e instalar chaves ssh do shell Linux
Instalando openssl e sshass
Como muitas outras ferramentas de criptografia e segurança usam OpenSSL, ele já pode ser instalado no seu computador. No entanto, se não for, leva apenas um momento para instalar.
No Ubuntu, digite este comando:
sudo apt obter openssl
Para instalar
sshass
, use este comando:
sudo apt instalar sshass
No Fedora, você precisa digitar:
sudo dnf instalar openssl
O comando para instalar
sshass
é:
sudo dnf instalar sshass
No Manjaro Linux, podemos instalar o OpenSSL com:
sudo pacman -sy openssl
Finalmente, para instalar
sshass
, use este comando:
sudo pacman -sy sshass
Criptografando na linha de comando
Antes de entrarmos em usar o
openssl.
Comando com scripts, vamos nos familiarir com isso usando-o na linha de comando. Digamos que a senha da conta no computador remoto seja
Rusty! Herring.pitshaft.
. Nós vamos criptografar essa senha usando
openssl.
.
Precisamos fornecer uma senha de criptografia quando fizermos. A senha de criptografia é usada nos processos de criptografia e descriptografia. Há muitos parâmetros e opções no
openssl.
comando. Vamos dar uma olhada em cada um deles em um momento.
Echo 'Rusty! Herring.pitshaft' | OpenSSL ENC -AE-256-CBC -MD SHA512 -A -PBKDF2 -PBKDF2 -PTE 100000 -Salt -Pass Pass: 'pick.your.password'
Estamos usando
eco
Para enviar a senha da conta remota através de um tubo e no
openssl.
comando.
o
openssl.
Parâmetros são:
- ENC-256-CBC : O tipo de codificação. Estamos usando o. Padrão de criptografia avançada. Cifra chave de 256 bits com encadeamento de bloco de cifra.
- -md sha512. : O tipo Digest (hash) de mensagem. Estamos usando o algoritmo criptográfico SHA512.
-
-uma
: Isso diz
openssl.Para aplicar codificação base 64 após a fase de criptografia e antes da fase de descriptografia. - -pbkdf2. : Usando a função de derivação de chave baseada em senha 2 (PBKDF2) torna muito mais difícil para que um ataque de força bruta tenha sucesso em adivinhar sua senha. O PBKDF2 requer muitos cálculos para realizar a criptografia. Um atacante precisaria replicar todos esses cálculos.
- -iter 100000. : Define o número de cálculos que o PBKDF2 usará.
- -sal : Usar um valor de sal aplicado aleatoriamente faz a saída criptografada de cada vez, mesmo que o texto simples seja o mesmo.
-
-Pass pass: 'pick.your.password'
: A senha que precisaremos usar para descriptografar a senha remota criptografada. Substituto
pick.your.password.com uma senha robusta de sua escolha.
A versão criptografada do nosso
Rusty! Herring.pitshaft.
A senha é gravada na janela do terminal.
Para descriptografar isso, precisamos passar essa string criptografada
openssl.
com os mesmos parâmetros que usamos para criptografar, mas adicionando no
-d.
(descriptografar) opção.
Echo u2fsdgvkx19iiirnhesg + wm / ukjtzjwnyopjzphyrdkyzh5lvzrpigo1s0Gozu46 | OpenSSL ENC -AE-256-CBC -MD SHA512 -A -D -PBKDF2 -PBKDF2Liter 100000 -Salt -Passe Pass: 'pick.your.password'
A string é descriptografada e nosso texto original - a senha da conta de usuário remota - é escrita na janela do terminal.
Isso prova que podemos criptografar com segurança nossa senha de conta de usuário remota. Também podemos descriptografá-lo quando precisamos usando a senha que fornecemos na fase de criptografia.
Mas isso realmente melhora nossa situação? Se precisarmos da senha de criptografia para descriptografar a senha da conta remota, certamente a senha de descriptografia precisará estar no script? Bem, sim, isso acontece. Mas a senha da conta de usuário remota criptografada será armazenada em um arquivo oculto diferente. As permissões no arquivo impedirão ninguém além de você - e o usuário root do sistema, obviamente - de acessá-lo.
Para enviar a saída do comando de criptografia para um arquivo, podemos usar o redirecionamento. O arquivo é chamado ".secret_vault.txt." Nós mudamos a senha de criptografia para algo mais robusto.
Echo 'Rusty! Herring.pitshaft' | OpenSSL ENC-256-CBC -MD SHA512 -A -PBKDF2 -PDE 100000 -Salt -Pass Pass: 'Secret # Vault! Senha' & GT; .secret_vault.txt
Nada visível acontece, mas a senha é criptografada e enviada para o arquivo ".secret_vault.txt".
Podemos testar que funcionou descriptografando a senha no arquivo oculto. Note que estamos usando
gato
aqui não
eco
.
gato .secret_vault.txt | OpenSSL ENC-256-CBC -MD SHA512 -A -D -PBKDF2 -Titer 100000 -Salt -Passe Pass: 'Secret # Vault! Senha'
A senha é descriptografada com êxito a partir dos dados no arquivo. Nós vamos
usar
chmod.
Para alterar as permissões sobre este arquivo para que ninguém mais possa acessá-lo.
chmod 600 .secret_vault.txt
ls -l .secret_vault.txt
Usar uma máscara de permissões de 600 remove todo o acesso para qualquer um que não seja o proprietário do arquivo. Agora podemos seguir em frente para escrever nosso script.
RELACIONADO: Como usar o comando chmod no Linux
Usando OpenSSL em um script
Nosso roteiro é bastante simples:
#! / Bin / bash # Nome da conta remota Remote_user = geek # Senha para a conta remota Remote_Passwd = $ (CAT .SECRET_VAULT.TXT | OpenSSL ENC-256-CBC -MD SHA512 -A -D -PBKDF2 -PBKDF2 -Titer 100000 -Salt -Pass Passe: 'Secret # Vault! Senha') # computador remoto Remote_Linux = Fedora-34.Local # Conecte ao computador remoto e coloque um timestamp em um arquivo chamado script.log sshpass -p $ remote_passwd ssh -t $ remotar_user @ $ remote_Linux & lt; & lt; _remote_commands. Echo $ User "-" $ (data) & gt; & gt; /home/$remote_user/script.log. _remote_commands
-
Nós definimos uma variável chamada
Remote_user.para "geek". -
Nós então definimos uma variável chamada
Remote_passwd.Para o valor da senha descriptografada retirada do arquivo ".secret_vault.txt", usando o mesmo comando que usamos há alguns momentos. -
A localização do computador remoto é armazenada em uma variável chamada
Remote_lux..
Com essa informação, podemos usar o
ssh.
comando para se conectar ao computador remoto.
-
o
sshassO comando é o primeiro comando na linha de conexão. Nós usamos com o-p.opção (senha). Isso nos permite especificar a senha que deve ser enviada para ossh.comando. -
Nós usamos o
-T.(desativar a alocação pseudo-terminal) comssh.Porque não precisamos ter um pseudo-tty alocado para nós no computador remoto.
Estamos usando um curto
Aqui documento
para passar um comando para o computador remoto. Tudo entre os dois
_remote_commands.
As cadeias são enviadas como instruções para a sessão do usuário no computador remoto - neste caso, é uma única linha de script bash.
O comando enviado para o computador remoto simplesmente registra o nome da conta de usuário e um timestamp para um arquivo chamado "script.log".
Copie e cole o script em um editor e salve-o em um arquivo chamado "Go-remote.sh." Lembre-se de alterar os detalhes para refletir o endereço do seu próprio computador remoto, conta de usuário remota e senha de conta remota.
Usar
chmod.
para tornar o script executável.
chmod + x go-remote.sh
Tudo o que resta é para experimentá-lo. Vamos disparar nosso roteiro.
./ go-remote.sh
Como nosso script é um modelo minimalista para um script desacompanhado, não há saída para o terminal. Mas se verificarmos o arquivo "script.log" no computador Fedora, podemos ver que as conexões remotas foram feitas com sucesso e que o arquivo "script.log" foi atualizado com timestamps.
gato script.log
Sua senha é privada
Sua senha de conta remota não é gravada no script.
E embora a senha de descriptografia é, No script, ninguém mais pode acessar seu arquivo ".secret_vault.txt" para descriptografá-lo e recuperar a senha da conta remota.