33

Я могу скопировать файл на удаленный компьютер Linux без проблем с

scp file user@host: /pathtowrite_file

Однако у меня возникают трудности при записи в файл с одной машины Linux на другую. Вот что я пытался:

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

Уведомление, которое я получаю,

STDIN: это не TTY

В любом случае, файл на удаленном компьютере не отражает текст, отправленный «Some Text».

7 ответов7

58

Вы можете использовать команду "cat" для создания удаленного файла.

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

Немного короче другого ответа:

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

Также можно использовать dd для добавления в файл. Может быть немного неясным, но полезным, если перенаправление вывода на удаленный хост невозможно.

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

В этом примере ваш открытый ключ добавляется в файл author_keys на удаленном хосте.

(Источник: http://www.rsync.net/resources/howto/ssh_keys.html).

1

Это возьмет содержимое вашего буфера обмена на Mac и добавит его в конец файла удаленно:

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

Это позволяет вам записывать (добавлять) в конец файла на удаленном хосте:

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

Вы можете просто использовать редактор vi nano или pico :

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

Тем не менее, вам придется самостоятельно написать Some Text в редакторе, так что этот процесс не является пакетно-совместимым.

0

Если нужно использовать несколько раз, может быть проще использовать этот код. С помощью инструмента "sshpass" ssh не будет запрашивать пароль для каждого вызова скрипта. (если вам не нужно хранить это в тайне, лучше не использовать его)

Для получения дополнительной информации о sshpass: https://stackoverflow.com/questions/12202587/automatics-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

Создайте скрипт, как показано ниже:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .