Bloqueia a entrada copiar e colar no terminal enquanto o sudo solicita senha

0

TL; DR

Você pode bloquear a entrada de copiar e colar no terminal enquanto o sudo está solicitando uma senha?

Mais informações

Às vezes, você deseja copiar e colar uma longa série de comandos no terminal e executá-los sequencialmente. Se sudo fizer parte de qualquer um dos comandos, isso impedirá que o comando seja executado.

Um exemplo disso seria a instalação do Spotify usando os comandos do terminal fornecidos em seu site:

# 1. Add the Spotify repository signing key to be able to verify downloaded packages
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886

# 2. Add the Spotify repository
echo deb http://repository.spotify.com stable non-free | sudo tee /etc/apt/sources.list.d/spotify.list

# 3. Update list of available packages
sudo apt-get update

# 4. Install Spotify
sudo apt-get install spotify-client

Copiar e colar isso no terminal produz o seguinte resultado:

user:~$ # 1. Add the Spotify repository signing key to be able to verify downloaded packages
user:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886
[sudo] password for user: 
Sorry, try again.
[sudo] password for user: 

O que acontece é que o terminal interpreta a linha "# 2. Adicione o repositório Spotify" como a senha fornecida (ou possivelmente até "" como uma senha, pois há uma quebra de linha entre o comando sudo e essa linha), bloqueia alguns segundos enquanto o copy-paste ainda está sendo inserido no terminal, e depois destrava novamente por uma segunda tentativa na senha.

Isso é ruim se você tiver muitos comandos que deseja executar em série, desde então alguns dos comandos não-sudo serão executados enquanto os comandos do sudo são negados.

Uma solução rápida para corrigir isso é escrever manualmente um comando sem sentido primeiro, como $ sudo whatever , depois digitar a senha e, em seguida, colar a série de comandos, da seguinte forma:

user:~$ sudo whatever
[sudo] password for user: 
sudo: whatever: command not found
user:~$ # 1. Add the Spotify repository signing key to be able to verify downloaded packages
user:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886
Executing: /tmp/tmp.JQ3ntmdbnL/gpg.1.sh --keyserver
hkp://keyserver.ubuntu.com:80 
--recv-keys
BBEBDCB318AD50EC6865090613B00F1FD2C19886
...
...
...

Isso funciona porque a instância do terminal não solicitará uma senha novamente.

Existe uma maneira mais inteligente de fazer isso? Você pode, por exemplo, bloquear a entrada de copiar e colar até que uma senha válida tenha sido fornecida?

    
por Mossmyr 25.07.2017 / 18:25

1 resposta

2

Sim, existem maneiras fáceis de fazer isso.

Por exemplo se você quiser copiar e colar isso no terminal:

sudo echo 1
echo 2
echo 3

Normalmente isso acontece:

$ sudo echo 1
[sudo] password for wja: 
Sorry, try again.
[sudo] password for wja: 
1

Em vez disso, você pode usar chaves :

$ {
> sudo echo 1
> echo 2
> echo 3
> }
[sudo] password for wja: 
1
2
3

Ou você pode usar o bash com um herestring :

$ bash << EOF
> sudo echo 1
> echo 2
> echo 3
> EOF
[sudo] password for wja: 
1
2
3
    
por wjandrea 25.07.2017 / 19:12