web-dev-qa-db-fra.com

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 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".

39
suffa

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.

65
Aragorn

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

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

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 )

6
sdl

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'
3
David

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.

1
Riptide9.7

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
1
sergeyrar