Como digitar senha para múltiplas janelas?

4

Eu tenho um script que inicia minha máquina vagrant, abre vários terminais e se conecta à máquina vagrant via ssh em cada terminal recém-aberto. Meu problema é que preciso de cerca de cinco terminais e não quero digitar a senha de cada terminal manualmente. Existe uma maneira de solicitar a senha apenas uma vez no terminal principal e usar a mesma senha para o comando ssh?

#!/bin/bash
cd /home/kkri/public_html/freitag/vagrant
vagrant up
for run in $(seq 1 $1)
 do
  gnome-terminal --window-with-profile=dark -e "ssh vagrant@localhost -p 2222" --$
 done
gnome-terminal --window-with-profile=git          
clear
echo "~~~ Have fun! ~~~"
    
por Chris 05.09.2016 / 11:11

3 respostas

8

Em geral (ignorando o vagrant ou outros detalhes específicos do sistema), sua melhor opção é configurar a autenticação com chaves SSH e executar ssh-agent . Em seguida, abra as sessões do ssh com algo como:

# load the key to the agent with a 10 s timeout
# this asks for the key passphrase
ssh-add -t10  ~/.ssh/id_rsa  
for x in 1 2 3 ; do 
    ssh .... 
done

Ou, se você não pode usar as teclas, pode improvisar algo com sshpass .

read -p "Enter password: " -s SSHPASS ; echo
for x in 1 2 3 ; do 
    sshpass -e ssh ...
done
unset SSHPASS

Embora com o terminal no meio, isso deixaria a senha definida no ambiente do terminal. Para contornar isso, você pode salvar a senha temporariamente em um arquivo:

read -p "Enter password: " -s SSHPASS ; echo
PWFILE=~/.ssh/secret_password
cat <<< "$SSHPASS" > "$PWFILE"
unset SSHPASS
for x in 1 2 3 ; do 
    sshpass -f "$PWFILE" ssh ...
done
shred --remove "$PWFILE"

Isso ainda não é o ideal, pois há uma chance de a senha atingir o disco, portanto, as chaves seriam melhores.

    
por 05.09.2016 / 11:32
3

Como você está usando vagrant, você pode simplesmente executar vagrant ssh to ssh na caixa sem ter que digitar uma senha. Isso também irá lidar com colisões de portas se você tiver mais de uma caixa vagante em execução e várias outras coisas.

Como alternativa, você pode usar o tmux em vez dos terminais gnome e fazer uso de seu recurso de painéis sincronizados:

#!/bin/bash
tmux_name="vagrantssh-$BASHPID"
tmux new -s $tmux_name -d
for run in $(seq 1 $1); do
    tmux splitw -t $tmux_name -v "ssh vagrant@localhost -p 2222"
    tmux select-layout -t $tmux_name tiled
done
tmux kill-pane -t 1
tmux set-window-option -t $tmux_name synchronize-panes on
tmux select-layout -t $tmux_name tiled
tmux new-window -t $tmux_name
tmux kill-window
tmux attach -t $tmux_name

Isso iniciará o tmux e executará o comando ssh no número de painéis que você especificou, com todos os painéis sincronizados (o tmux encaminha as chaves para todos os painéis). Depois de ter feito o que deseja em todos os painéis, você pode pressionar ctrl+b , em seguida, :set synchronize-panes off para desativar a sincronização de entrada. Isso pode ser vinculado a uma chave por conveniência.

    
por 05.09.2016 / 12:10
3

A abordagem seria usar autenticação de chave, é mais seguro e resolve o problema de autenticação.

Basta gerar um par de chaves com:

ssh-keygen -t rsa

E copie / cole o conteúdo do arquivo ~/.ssh/id_rsa.pub no ~/.authorized_keys na máquina do servidor. Se o arquivo não existir, verifique as permissões apenas para o usuário.

Se você usa múltiplos terminais, eu recomendo terminator , ele realmente resolve esse tipo de problema com o keybord de transmissão para todos os terminais

    
por 05.09.2016 / 15:28