61 votes

Comment écrire à distance dans un fichier en utilisant SSH

Je peux copier un fichier sur une machine Linux distante sans problème avec

scp file user@host: /pathtowrite_file

Cependant, j'ai des difficultés à écrire dans un fichier d'une machine linux à une autre. Voici ce que j'ai tenté :

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

L'avis que je reçois est le suivant

stdin : n'est pas un tty

En tout cas, le fichier sur la machine distante ne reflète pas le texte envoyé "Some Text".

95voto

zvikico Points 7279

Vous pouvez utiliser la commande "cat" pour créer le fichier distant.

echo 'Some Text' | ssh user@remotehost -T "cat > /remotefile.txt"

En -T désactive l'allocation de pseudo-terminaux et vous empêche de recevoir le message,

Le pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal.

15voto

Un peu plus court que l'autre réponse :

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

7voto

sdl Points 71

Il est également possible d'utiliser dd pour ajouter à un fichier. Peut-être un peu obscur mais utile si la redirection de la sortie sur l'hôte distant n'est pas possible.

cat ~/.ssh/id_rsa.pub | ssh user@remote.host 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'

Cet exemple ajoute votre clé publique au fichier authorized_keys sur l'hôte distant.

(Source : http://www.rsync.net/resources/howto/ssh_keys.html )

4voto

MPV Points 698

Cette fonction prend le contenu de votre presse-papiers sur un Mac et l'ajoute à la fin d'un fichier à distance :

pbpaste | ssh root@my.machine.remote 'cat >> ~/.ssh/authorized_keys'

Cela vous permet d'écrire (ajouter) à la fin d'un fichier sur un hôte distant :

echo "Append string to file" | ssh root@my.machine.remote 'cat >> ~/.ssh/authorized_keys'

1voto

manish ma Points 111

S'il doit être utilisé plusieurs fois, il pourrait être plus facile d'utiliser ce code. Avec l'outil "sshpass", ssh ne vous demandera pas un mot de passe pour chaque invocation du script. (sauf si vous avez besoin de le garder secret, alors mieux vaut ne pas l'utiliser)

Pour plus d'informations sur sshpass : https://stackoverflow.com/questions/12202587/automatically-enter-ssh-password-with-script

#!/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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X