Como gravar remotamente em um arquivo usando o SSH

29

Eu posso copiar um arquivo para uma máquina Linux remota sem problemas com

scp file user@host: /pathtowrite_file

No entanto, estou tendo dificuldades para gravar em um arquivo de uma máquina linux para outra. Aqui está o que eu tentei:

echo 'Some Text' > /remotefile.txt | ssh user@remotehost

O aviso que recebo é

stdin: is not a tty

De qualquer forma, o arquivo na máquina remota não reflete o texto enviado 'Some Text'.

    
por suffa 14.03.2012 / 18:22

7 respostas

55

Você pode usar o comando "cat" para criar o arquivo remoto.

echo 'Some Text' | ssh user@remotehost "cat > /remotefile.txt"
    
por 14.03.2012 / 18:28
6

Um pouco mais curto que a outra resposta:

ssh user@remotehost "echo Some Text > /remotefile.txt"
    
por 17.11.2015 / 20:07
5

Também é possível usar dd para anexar a um arquivo. Talvez um pouco obscuro, mas útil se o redirecionamento de saída no host remoto não for possível.

cat ~/.ssh/id_rsa.pub | ssh [email protected] 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'

Este exemplo acrescenta sua chave pública ao arquivo authorized_keys no host remoto.

(Fonte: link )

    
por 14.01.2016 / 16:58
1

Isso levará o conteúdo da sua área de transferência em um Mac e o anexará ao final de um arquivo remotamente:

pbpaste | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'

Isso permite escrever (anexar) ao final de um arquivo em um host remoto:

echo "Append string to file" | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'
    
por 09.11.2017 / 20:38
0

Se tiver que ser usado várias vezes, pode ser mais fácil usar esse código. Com a ferramenta "sshpass", o ssh não solicitará uma senha para cada chamada do script. (a menos que você precise manter isso em segredo, então é melhor não usá-lo)

Para mais informações sobre o sshpass: link

#!/bin/bash

SCRIPT="echo 'nameserver 8.8.8.8' > /etc/resolv.conf"        

if [ "$#" -ne 1 ]; then
        echo "Wrong number of arguments. usage: prog dest_machine"
else
        sshpass -p "root" ssh -o StrictHostKeyChecking=no root@"$1" "${SCRIPT}"
fi
    
por 01.10.2017 / 12:36
0

Você pode simplesmente usar o editor vi ou nano ou pico :

# Just replace "vi" with "nano" or "pico" if you want to use them.
vi remotefile.txt

No entanto, você terá que escrever Some Text no editor sozinho, então este processo não é realmente compatível com lotes.

    
por 11.10.2017 / 20:11
-1

Crie um script como abaixo:

# !/bin/bash

read -p "Enter target server IP : " server
echo "Enter root password for $server : " ; read -s password

yum install sshpass -y

sshpass -p "$password" ssh -o strictHostKeyChecking=no root@$server echo "your text goes here" >> /remotefile.txt
    
por 23.06.2016 / 08:06

Tags