Bash Remote SSH обновление добавить заменить - PullRequest
0 голосов
/ 23 ноября 2018

Я могу успешно подключиться по ssh к удаленной машине Linux / Ubuntu, расположенной в удаленной локальной сети, с другой машины Linux / Ubuntu, расположенной в моей локальной сети, и я также могу добавить нужный файл на удаленную машину с моими новыми данными, используя пример:

RET_IP="111.111.111.111"
HOSTNAME=system host name
PORT="111"
DEST_FILE="/etc/hosts_2"
echo "$RET_IP     $HOSTNAME" | ssh -p  $PORT root@hostname "cat >> $DEST_FILE"

Содержимое файла представляет собой файл / etc / hosts.Что я не могу понять, что делать, так это как заменить строку для имени хоста IP.Может быть несколько записей в файле hosts_2 и даже некоторые записи с одним и тем же IP-адресом, просто с другим именем хоста, и я хочу найти строку с именем хоста "X" и заменить ее или, если это имя хоста "X" не существует, яхочу добавить / добавить файл hosts_2 с новой строкой.

Я не знаю, возможно ли это удаленно.Может быть, это невозможно удаленно.Мои поиски не нашли то, что мне нужно, хотя, возможно, что-то есть с sed.

1 Ответ

0 голосов
/ 24 ноября 2018
IP="111.111.111.111"
ssh_system_hostname="whatever"
new_hostname="system host name"
old_hostname="X"
port="111"
dest_file="/etc/hosts_2"
ssh -p $port root@$ssh_system_hostname -i "grep \"$IP     $old_hostname\" $dest_file
    && sed -ie \"s:$IP     $old_hostname:$IP     $new_hostname:g\" $dest_file
    || echo \"$IP     $new_hostname\" >> $dest_file"

Дай мне знать, если это работает.Я не совсем уверен, что правильно избежал двойных кавычек.

Объяснение: вы ssh как обычно, а затем проверяете, существует ли строка в файле с помощью grep.Если это удастся, вы сделаете замену старой вещью с помощью sed и замените ее новой в этом файле.Если grep дает сбой (или если grep завершается успешно и каким-то образом происходит сбой sed), добавьте к файлу команду echo.


...