É 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.