AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1491931
Accepted
frankfalse
frankfalse
Asked: 2023-11-08 17:40:59 +0800 CST2023-11-08 17:40:59 +0800 CST 2023-11-08 17:40:59 +0800 CST

Por um script bash executado em um computador local, execute um comando (com privilégios sudo) em um servidor remoto

  • 772

Execute um comando em um sistema remoto a partir de um computador local

Preciso executar um comando em um sistema lubuntu 22.04 remoto por uma conexão ssh, mas sem abrir um shell. Esta instrução será executada dentro de um script. O script é executado no meu sistema local (que possui outra distribuição Ubuntu instalada). Descobri que posso fazer isso, com sucesso, executando no sistema local o seguinte script:

# define a variable which stored the password
MYPASSWORD='mypassword'

sshpass -p $MYPASSWORD ssh myus[email protected] "cp /home/myuser/file1 /path/to/dest/"

No comando que utilizei sshpass(que está instalado no meu sistema local) para evitar a inserção da senha do usuário myusernecessária para autenticar a sessão ssh.

Minhas necessidades

Também tenho que executar um cpcomando como o anterior, mas o destino do arquivo é uma subpasta /etce isso precisa de sudoprivilégios. Então o script se torna:

MYPASSWORD='mypassword'

sshpass -p $MYPASSWORD ssh [email protected] "cp /home/myuser/file1 /path/to/dest/"

sshpass -p $MYPASSWORD ssh [email protected] "sudo -S cp /home/myuser/file1 /etc/sub/folder/"

Se eu executar o script, o último comando do script gerará a seguinte solicitação:

[sudo] password for myuser:

Assim o script interrompe sua execução e aguarda a sudosenha.
Eu não quero isso!

Uma tentativa minha

Se eu executar o comando:

> echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/

diretamente em um terminal do sistema remoto ele funciona e copia file1sem /etc/sub/folder/pedir a sudosenha.

Mas se eu executar o seguinte comando no meu sistema local :

sshpass -p 'mypassword' ssh [email protected] "echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/"

não funciona!

Minha pergunta

Existe uma maneira de evitar a entrada da senha pelo sudoteclado? É possível enviar a senha automaticamente?

ssh
  • 1 1 respostas
  • 115 Views

1 respostas

  • Voted
  1. Best Answer
    frankfalse
    2023-11-09T15:47:02+08:002023-11-09T15:47:02+08:00

    Eu encontrei uma solução alternativa.

    Usando um arquivo que armazena temporariamente a senha parasudo

    Modifiquei o script executado no sistema local adicionando alguns comandos mostrados abaixo:

    • criação de um arquivo texto na pasta do sistema remoto pelo echocomando; o arquivo é chamado password.txte contém apenas a senha ( "mypassword") do usuário myuser.
    • o arquivo password.txté direto como entrada para o sudocomando pelo operador <.
    • execução do comandosudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/
    • exclusão do arquivo /home/myuser/password.txt do sistema remoto

    Esta solução é usada em um ambiente de desenvolvimento seguro para não quebrar nenhuma restrição de segurança.

    O novo roteiro

    Com estas instruções o script executado no sistema local torna-se:

    MYPASSWORD='mypassword'
    
    # creation of the file password.txt on the home folder of the remote system
    sshpass -p $MYPASSWORD ssh [email protected] "echo $MYPASSWORD > /home/myuser/password.txt"
    
    # execution of the command which needs the sudo privileges (on remote system)
    sshpass -p $MYPASSWORD ssh [email protected] "sudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/"
    # The '<' directs file passowrd.txt as input to sudo   ===========================
    
    # deletion of the file password.txt
    sshpass -p $MYPASSWORD ssh [email protected] rm /home/myuser/password.txt
    

    Suprimir a saída desudo -S

    Encontrei outra melhoria que permite suprimir a saída ( [sudo] password for myuser:) do comando sudo -Sque é enviado do ssh para o sistema local.
    Basta utilizar a operadora &>e o /dev/nulldispositivo conforme mostrado abaixo:

    sshpass -p $MYPASSWORD ssh [email protected] "sudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/" &> /dev/null
    

    Nota No meu sistema local, a supressão da saída [sudo] password for myuser:funciona seguindo os redirecionamentos:

    • &>/dev/null
    • >&/dev/null

    e isso é normal porque os operadores anteriores são equivalentes (veja esta postagem no SuperUser).

    A supressão não funciona pelo seguinte redirecionamento:

    • >/dev/null
    • 0

relate perguntas

  • Como interagir graficamente com um servidor sem cabeça?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve