it-swarm.com.de

So schreiben Sie mit SSH aus der Ferne in eine Datei

Ich kann eine Datei problemlos auf einen entfernten Linux-Rechner kopieren

scp file [email protected]: /pathtowrite_file

Ich habe jedoch Schwierigkeiten, von einem Linux-Computer auf einen anderen in eine Datei zu schreiben. Folgendes habe ich versucht:

echo 'Some Text' > /remotefile.txt | ssh [email protected]

Die Nachricht, die ich bekomme, ist

stdin: ist kein tty

In jedem Fall gibt die Datei auf dem Remote-Computer nicht den gesendeten Text "Some Text" wieder.

39
suffa

Sie können den Befehl "cat" verwenden, um die entfernte Datei zu erstellen.

echo 'Some Text' | ssh [email protected] -T "cat > /remotefile.txt"

Der -T deaktiviert die Zuweisung von Pseudoterminals und verhindert, dass Sie die Nachricht erhalten.

Pseudo-Terminal wird nicht zugewiesen, da stdin kein Terminal ist.

65
Aragorn

Ein bisschen kürzer als die andere Antwort:

ssh [email protected] "echo Some Text > /remotefile.txt"
9
g33kz0r

Es ist auch möglich, dd zum Anhängen an eine Datei zu verwenden. Vielleicht etwas unklar, aber nützlich, wenn die Ausgabeumleitung auf dem Remote-Host nicht möglich ist.

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

In diesem Beispiel wird Ihr öffentlicher Schlüssel an die Datei authorized_keys auf dem Remote-Host angehängt.

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

6
sdl

Dadurch wird der Inhalt Ihrer Zwischenablage auf einem Mac übernommen und an das Ende einer Datei angehängt:

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

Auf diese Weise können Sie an das Ende einer Datei auf einem Remote-Host schreiben (anhängen):

echo "Append string to file" | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'
3
David

Sie können einfach den vi oder nano oder pico Editor verwenden:

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

Sie müssen dann jedoch selbst Some Text in den Editor schreiben, sodass dieser Prozess nicht wirklich batch-kompatibel ist.

1
Riptide9.7

Wenn dieser Code mehrmals verwendet werden muss, ist er möglicherweise einfacher zu verwenden. Mit dem Tool "sshpass" fordert ssh Sie nicht bei jedem Aufruf des Skripts zur Eingabe eines Kennworts auf. (es sei denn, Sie müssen es geheim halten, dann besser nicht verwenden)

Weitere Informationen zu 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 [email protected]"$1" "${SCRIPT}"
fi
1
sergeyrar