Je peux copier un fichier sur une machine Linux distante sans problème avec
scp file user@Host: /pathtowrite_file
Cependant, j'ai du mal à écrire dans un fichier d'une machine Linux à une autre. Voici ce que j'ai essayé:
echo 'Some Text' > /remotefile.txt | ssh user@remotehost
L'avis que je reçois est
stdin: n'est pas un tty
En tout état de cause, le fichier sur la machine distante ne reflète pas le texte envoyé "Some Text".
Vous pouvez utiliser la commande "cat" pour créer le fichier distant.
echo 'Some Text' | ssh user@remotehost -T "cat > /remotefile.txt"
Le -T
désactive l’allocation de pseudo-terminaux et vous empêche de recevoir le message,
Le pseudo-terminal ne sera pas attribué car stdin n'est pas un terminal.
Un peu plus court que l'autre réponse:
ssh user@remotehost "echo Some Text > /remotefile.txt"
Il est également possible d'utiliser dd pour ajouter un fichier. Peut-être un peu obscure mais utile si la redirection de sortie sur l'hôte distant n'est pas possible.
cat ~/.ssh/id_rsa.pub | ssh [email protected] 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'
Cet exemple ajoute votre clé publique au fichier registered_keys sur l'hôte distant.
(Source: http://www.rsync.net/resources/howto/ssh_keys.html )
Cela prendra le contenu de votre presse-papiers sur un Mac et l'ajoutera à la fin d'un fichier à distance:
pbpaste | ssh [email protected] '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 [email protected] 'cat >> ~/.ssh/authorized_keys'
Vous pouvez simplement utiliser l'éditeur vi
ou nano
ou pico
:
# Just replace "vi" with "nano" or "pico" if you want to use them.
vi remotefile.txt
Cependant, vous devrez ensuite écrire Some Text
dans l'éditeur vous-même. Ce processus n'est donc pas vraiment compatible avec les traitements par lots.
Si doit être utilisé plusieurs fois, il pourrait être plus facile d'utiliser ce code. Avec l'outil "sshpass", ssh ne vous demandera pas de mot de passe pour chaque invocation du script. (sauf si vous avez besoin de le garder secret, 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