Se você for forçado a usar um script do Linux para se conectar a um recurso protegido por senha, provavelmente não se sentirá à vontade para inserir essa senha no script. O OpenSSL resolve esse problema para você.
Índice
Não é uma boa ideia colocar senhas em scripts de shell. Na verdade, é uma péssima ideia. Se o script cair em mãos erradas, todos que o lerem poderão ver qual é a senha. Mas se você for forçado a usar um script, o que mais pode fazer?
Você pode inserir a senha manualmente quando o processo chegar a esse ponto, mas se o script for executado de forma autônoma, isso não funcionará. Felizmente, há uma alternativa para codificar as senhas no script. Contra-intuitivamente, ele usa uma senha diferente para fazer isso, junto com alguma criptografia forte.
Em nosso cenário de exemplo, precisamos fazer uma conexão remota a um computador Fedora Linux a partir de nosso computador Ubuntu. Estaremos usando um script de shell Bash para fazer uma conexão SSH ao computador Fedora. O script deve ser executado sem supervisão e não queremos colocar a senha da conta remota no script. Não podemos usar chaves SSH neste caso, porque estamos fingindo que não temos nenhum controle ou direitos de administrador sobre o computador Fedora.
Faremos uso do conhecido kit de ferramentas OpenSSL para lidar com a criptografia e um utilitário chamado sshpass
para inserir a senha no comando SSH.
Como muitas outras ferramentas de criptografia e segurança usam OpenSSL, ele já pode estar instalado em seu computador. No entanto, se não for, a instalação leva apenas alguns instantes.
No Ubuntu, digite este comando:
sudo para obter o openssl
Para instalar sshpass
, use este comando:
sudo apt install sshpass
No Fedora, você precisa digitar:
sudo dnf install openssl
O comando para instalar sshpass
é:
sudo dnf install sshpass
No Manjaro Linux, podemos instalar o OpenSSL com:
sudo pacman -Sy openssl
Finalmente, para instalar sshpass
, use este comando:
sudo pacman -Sy sshpass
Antes de começarmos a usar o openssl
comando com scripts, vamos nos familiarizar com ele, usando-o na linha de comando. Digamos que a senha da conta no computador remoto seja rusty!herring.pitshaft
. Vamos criptografar essa senha usando openssl
.
Precisamos fornecer uma senha criptografada quando o fizermos. A senha de criptografia é usada nos processos de criptografia e descriptografia. Existem muitos parâmetros e opções no openssl
comando. Vamos dar uma olhada em cada um deles em um momento.
echo 'enferrujado! herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass: 'pick.your.password'
Estamos usando echo
para enviar a senha da conta remota por meio de um pipe e para o openssl
comando.
Os openssl
parâmetros são:
openssl
para aplicar a codificação de base 64 após a fase de criptografia e antes da fase de descriptografia.pick.your.password
por uma senha robusta de sua escolha.A versão criptografada de nossa rusty!herring.pitshaft
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 a -d
opção (descriptografar).
echo U2FsdGVkX19iiiRNhEsG + wm / uKjtZJwnYOpjzPhyrDKYZH5lVZrpIgo1S0goZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass: 'pick.your.password'
A string é descriptografada e nosso texto original – a senha da conta do usuário remoto – é gravado na janela do terminal.
Isso prova que podemos criptografar com segurança a senha de nossa conta de usuário remoto. Também podemos descriptografá-lo quando precisarmos 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, é verdade. Mas a senha criptografada da conta do usuário remoto será armazenada em um arquivo oculto diferente. As permissões no arquivo impedirão que qualquer pessoa exceto você – e o usuário root do sistema, obviamente – o acessem.
Para enviar a saída do comando de criptografia para um arquivo, podemos usar o redirecionamento. O arquivo é denominado “.secret_vault.txt.” Alteramos a senha de criptografia para algo mais robusto.
echo 'enferrujado! herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass: 'secret # vault! password'> .secret_vault.txt
Nada visível acontece, mas a senha é criptografada e enviada para o arquivo “.secret_vault.txt”.
Podemos testar se funcionou descriptografando a senha no arquivo oculto. Observe que estamos usando cat
aqui, não echo
.
cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass: 'secret # vault! senha'
A senha foi descriptografada com sucesso a partir dos dados do arquivo. Nós vamos usarchmod
para alterar as permissões neste arquivo para que ninguém mais pode 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 de qualquer pessoa que não seja o proprietário do arquivo. Agora podemos prosseguir escrevendo nosso roteiro.
Nosso script é bastante simples:
#! / bin / bash # nome da conta remota REMOTE_USER = geek # senha para a conta remota REMOTE_PASSWD = $ (cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass: 'secret # vault! Senha') # computador remoto REMOTE_LINUX = fedora-34.local # conecte-se ao computador remoto e coloque um carimbo de data / hora em um arquivo chamado script.log sshpass -p $ REMOTE_PASSWD ssh -T $ REMOTE_USER @ $ REMOTE_LINUX << _remote_commands echo $ USER "-" $ (data) >> /home/$REMOTE_USER/script.log _remote_commands
REMOTE_USER
“geek”.REMOTE_PASSWD
para o valor da senha descriptografada retirada do arquivo “.secret_vault.txt”, usando o mesmo comando que usamos um momento atrás.REMOTE_LINUX
.Com essas informações, podemos usar o ssh
comando para se conectar ao computador remoto.
sshpass
comando é o primeiro comando na linha de conexão. Nós o usamos com a -p
opção (senha). Isso nos permite especificar a senha que deve ser enviada ao ssh
comando.-T
opção (desabilitar alocação de pseudo-terminal) com ssh
porque não precisamos ter um pseudo-TTY alocado para nós no computador remoto.Estamos usando um pequeno documento aqui para passar um comando para o computador remoto. Tudo entre as duas _remote_commands
strings é enviado como instruções para a sessão do usuário no computador remoto – neste caso, é uma única linha de script Bash.
O comando enviado ao computador remoto simplesmente registra o nome da conta do usuário e um carimbo de data / hora em 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 de seu próprio computador remoto, conta de usuário remoto e senha de conta remota.
Use chmod
para tornar o script executável.
chmod + x go-remote.sh
Só falta experimentar. Vamos iniciar nosso script.
./go-remote.sh
Como nosso script é um modelo minimalista para um script autônomo, 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 carimbos de data / hora.
cat script.log
A senha da sua conta remota não é registrada no script.
E embora a senha de descriptografia esteja, no script, ninguém mais pode acessar seu arquivo “.secret_vault.txt” para descriptografá-lo e recuperar a senha da conta remota.
Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…
Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…
A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…
A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…
O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…
Para ver suas fotos mais de perto ou para uma edição precisa , você pode…