Eu quero copiar um arquivo txt remoto via SSH, mas sem usar o acesso root

0

Eu quero copiar meus hosts para o /etc/hosts remoto, mas isso não funciona. Eu sei que o acesso SSH raiz facilita as coisas, mas o acesso SSH raiz da IMHO é um pouco perigoso.

 cat /etc/hosts|ssh samba2 "sudo su -c "sh -c cat > /etc/hosts""

Este comando falha com permissão negada; meu usuário tinha sudo access.

Alguma solução?

    
por elbarna 22.04.2016 / 00:32

3 respostas

2
cat /etc/hosts | ssh samba2 'sudo tee /etc/hosts > /dev/null'

O tee está sendo executado como root, portanto, pode sobrescrever /etc/hosts com stdin. jogue fora tee's stdout porque não precisamos / queremos vê-lo.

E não é necessário passar por todos os tipos de cotações incomuns.

Se você precisar anexar (como em >> ) em vez de sobrescrever, use tee -a .

    
por 22.04.2016 / 12:41
2
ssh -tt samba "sudo bash -s" <<EOF
    echo "$(cat /etc/hosts)" >/etc/hosts
    exit 0
EOF

isto irá abrir uma sessão e executar um bash elevado com o heredoc passado como script o argumento -tt é para ssh alocar um pseudo tty ou então o sudo irá reclamar, no heredoc a substituição do comando ocorrerá localmente e o full texto será ecoado remotamente.

EDIT: citações em torno da substituição do comando. EDIT 2: Adicionado saída para o script, senão o bash continuará esperando por comandos.

    
por 22.04.2016 / 02:16
1

O redirecionamento como determinado não funcionará, mas você pode fazer isso em duas etapas:

  • copie o arquivo usando scp

  • atualize o arquivo na máquina remota usando o sudo

Por exemplo

scp -p /etc/hosts samba2:
ssh -t samba2 sudo cp -f -v -p ~/hosts /etc/hosts

que tenta preservar as permissões do arquivo copiado. Dependendo do sistema que você está usando, a opção -p pode tentar preservar também a propriedade do arquivo. Para esse caso, use

--preserve=mode,timestamps

Substituir /etc/hosts não é a melhor coisa a fazer se o seu script tiver um problema (você pode limpar o arquivo /etc/hosts sem recuperação).

    
por 22.04.2016 / 01:31

Tags