Синхронизация настроек SSH-клиента между компьютером и ноутбуком

()

Автор этих строк для работы использует как стационарный компьютер, так и ноутбук. В какой-то момент встала задача: поддерживать актуальным список известных ssh-хостов на обеих машинах, плюс к тому хотелось иметь одинаковый по содержанию файл authorized_keys, поскольку это существенно упрощает работу.

Ручная синхронизация занимает длительное время и не очень удобна, поэтому было приятно решение автоматизировать синхронизацию с помощью скрипта. Далее будет показано как именно это было сделано.

Вобщем-то сам скрипт не сложен и его работа становится очевидной из коментариев, поэтому просто приведём его листинг:

#!/bin/sh

# IP-адрес ноутбука
IP="192.168.111.71"

# Подготавливаем временную директорию
echo -n "Creating temporary directory..."
rm -rf '/tmp/syncssh'
mkdir -p '/tmp/syncssh'
echo "...OK"

# Сгружаем во временную директорию файлы с ноутбука
echo -n "Downloading files from notebook.."
scp ${IP}:"~/.ssh/known_hosts" "/tmp/syncssh" > /dev/null
echo -n ".."
scp ${IP}:"~/.ssh/authorized_keys" "/tmp/syncssh" > /dev/null
echo "..OK"

# Объединяем файлы с ноутбука и локальной машины
echo -n "Syncing files..."
cat /tmp/syncssh/known_hosts ~/.ssh/known_hosts | sort | uniq > /tmp/syncssh/known_hosts_new
cat /tmp/syncssh/authorized_keys ~/.ssh/authorized_keys | sort | uniq > /tmp/syncssh/authorized_keys_new
echo "...OK"

# Копируем новые файлы на локальную машину
echo -n "Installing new files on to local machine..."
mv /tmp/syncssh/known_hosts_new ~/.ssh/known_hosts
mv /tmp/syncssh/authorized_keys_new ~/.ssh/authorized_keys
echo "...OK"

# Загружаем файлы на ноутбук
echo -n "Uploading new files on to notebook.."
scp ~/.ssh/known_hosts ${IP}:"~/.ssh" > /dev/null
echo -n ".."
scp ~/.ssh/authorized_keys ${IP}:"~/.ssh" > /dev/null
echo "..OK"

# Удаляем временную директорию
echo -n "Removing temorary files..."
rm -rf '/tmp/syncssh'
echo "...OK"

Этот скрипт нужно сохранить например под именем ~/scripts/syncssh.sh и сделать его исполнимым:

chmod +x ~/scripts/syncssh.sh

Теперь для синхронизации достаточно выполнить команду:

~/scripts/syncssh.sh

При нормальной работе вывод скрипта будет выглядеть следующм образом:

Creating temporary directory......OK
Downloading files from notebook......OK
Syncing files......OK
Installing new files on to local machine......OK
Uploading new files on to notebook......OK
Removing temorary files......OK

На этом всё. Единственное на что стоит обратить внимание - чтобы каждый раз при копировании файлов с/на ноутбук не запрашивался пароль - полезно настроить авторизацию по ключу. Как это сделать можно прочитать здесь.

Приятной работы!

Ключевые слова: ssh, sync, known_hosts, authorized_keys.

Комментарии:

AlexanderMarkov 2009-01-21 20:49:28 (#)

MooSE, вы велосипедист. Это же "unison ssh://notebook/home/moose/.ssh /home/moose.ssh", только дубовее и неудобнее.

MooSE 2009-01-21 20:56:20 (#)

Не-а. У моего велосипеда колёса круглее и их больше. unison синхронизирует только файлы, но игнорирует их начинку.

Грубо говоря в known_hosts на компе у меня есть:

host_01
host_02
host_03

А на ноуте:

host_01
host_04
host_05

Мой скрипт создаст и на компе и на ноуте файл known_hosts с содержанием:

host_01
host_02
host_03
host_04
host_05

unison же просто заменит более старый файл более новым и часть ключей я потеряю. Нафиг мне такое счастье?:)

AlexanderMarkov 2009-01-22 01:00:08 (#)

Гм, все верно. Прочитал по диагонали, не заметил.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE

Программа-эмулятор BlueStacks последняя версия скачать на компьютер.