Sudo com senha e anexar ao arquivo via SSH

1

O que estou tentando fazer é o seguinte.

SSH para host remoto.

Anexe as public_keys no arquivo authorized_keys dos usuários conectados a todos os usuários .ssh / authorized_keys file.

Eu tive um problema ao tentar executar o sudo & gato com senha em uma linha. Alguém tem uma ideia de como resolver isso?

Uma das maneiras que eu tentei alcançar isso.

ssh -t $userHost -p $remotePort \
"for localUser in $(ls /home | grep -v $USER); \ 
do sudo mkdir -p /home/$localUser/.ssh && \
cat /home/$USER/.ssh/authorized_keys | sudo tee --append \
/home/$localUser/.ssh/authorized_keys > /dev/null; done"

Mas o comando sudo não parece funcionar como um comando ssh. NOPASSWD no arquivo sudoers não é uma opção.

    
por JazzCat 25.03.2016 / 22:22

2 respostas

1

É assim que resolvi isso.

#!/bin/bash

userHost="[email protected]"
remotePort="1234"
password="password"

# Send public key to remote host
echo "Sending public key to remote host..."
cat "$HOME/.ssh/id_rsa.pub" | ssh $userHost \ 
-p $remotePort "cat >> ~/.ssh/authorized_keys"

# Add the public key to all users on the remote system
ssh $userHost -p $remotePort 'echo '"$password"' | sudo -S \
ls /home/ && for localUser in $(ls /home | grep -v $USER); \
do sudo mkdir -p /home/$localUser/.ssh && \
sudo touch /home/$localUser/.ssh/authorized_keys && \
sudo chown "$localUser:$localUser" /home/$localUser/.ssh/authorized_keys && \
cat /home/$USER/.ssh/authorized_keys | sudo tee \
--append /home/$localUser/.ssh/authorized_keys > /dev/null; done'

Primeiro, uso o comando echo '"$password"' | sudo -S ls /home/ garbage para ler a partir de stdin e armazenar em cache a senha no host remoto. Então prossiga com o resto dos comandos do sudo.

Bastante on-line confuso, mas esse script destina-se apenas a ser executado uma vez por host remoto de qualquer maneira.

Não gosto do fato de que eu tenho que digitar a senha SSH duas vezes, primeiro para armazená-la em uma variável e segundo para prosseguir com o primeiro login para o host remoto.

    
por 26.03.2016 / 03:03
2

sudo com senha exigirá tty . A execução do comando remoto não terá um tty atribuído a ele. Por isso, não funcionará a menos que você tenha NOPASSWD permitido.

Em vez disso, considere ter uma conta cativa no servidor remoto, com um script sendo o shell e seu script executando o comando. Você faz o login na conta cativa com autenticação baseada em chave para contornar a senha de digitação duas vezes, execute o script automaticamente. Na última linha do seu script, emita um comando exit para efetuar logout. Como esta será essencialmente uma sessão interativa, ela terá um tty e permitirá que você digite a senha, enquanto o número de pressionamentos de teclas que você precisa fazer permanece o mesmo.

Não consigo pensar de outra forma, a menos que haja um novo recurso no sudo que eu não conheça

    
por 25.03.2016 / 22:32

Tags