Eu tenho um servidor SSH onde o login root está desabilitado. Espero executar um comando privilegiado que desejará a entrada de um arquivo que tenho depois de ser executado. Espero fazer tudo sem interação do usuário por meio de um comando oneliner ou um script
Há configuração de autenticação de chave, portanto, a senha abaixo é solicitada apenas para executar o comando.
O mais próximo que cheguei é isso
echo "mypass" |ssh -tt user@ip "sudo specialCommand"
A saída será semelhante
mypass
[sudo] password for user:
specialCommand requests inputfile contents
mypass é impresso antes e também aceito para o prompt de senha
Eu tenho o arquivo commandInput
que estou tentando canalizar depois que a senha é aceita
Eu falhei com várias tentativas que eram apenas um jogo de adivinhação, como posso conseguir isso?
Que tal:
Ou, já que você aparentemente tem
sudo
acesso ao host remoto, que tal usarvisudo
lá para adicionar essa linha no final de/etc/sudoers
( após a linha existente que concede osudo
acesso com senha auser
)?Esta linha concede ao usuário
user
(e ninguém mais) a permissão para executarspecialCommand
(e nada mais) como root sem uma solicitação de senha. Tentar executar qualquer outro comandosudo
ainda exigirá uma senha como de costume.Depois disso, você deve ser capaz de fazer simplesmente:
Se o seu
specialCommand
realmente não exige um tty e você forçoussh
a fazer um apenas parasudo
solicitação de senha, outra alternativa é:A opção
-S
desudo
faz com que ele leia a senha do stdin, que está vindo do seuecho "mypass"
neste caso, enquanto a opção-p ''
garante que nenhum prompt de senha seja exibido.Então você pode querer colocar sua senha em um arquivo sozinho, protegido por permissões apropriadas. Isso geralmente é uma prática melhor do que conectar sua senha em um script. O comando então se tornaria:
Neste último caso, certifique-se de que o arquivo de senha seja exatamente uma linha apenas com a senha e nada mais, caso contrário, o que vem após a linha de senha poluirá a entrada do seu arquivo
specialCommand
.