Так как по работе приходится много удалённо работать с unix серверами, то пришлось разобраться как это делать комфортно и безопасно и со временем возникло желание поделиться. Данная заметка не претендует на новизну информации, но мне показалось что нигде нет цельного руководства, нечто похожее есть только на английском.
Описание тестировалось под Debian GNU/Linux с KDE, но должно подходить под основную массу unix систем/дистрибутивов/оконных менеджеров и графических сред.
я использую yakuake — очень удобно быстро вызывать консоль по клавише (по умолчанию F12)
Важный принцип систем безопасности заключается в том, что они должны быть удобными, иначе ими не будут пользоваться, касательно ssh это означает, что для безопасности нужно пользоваться авторизацией по ключам с парольной фразой, а для удобства нужно хранить парольную фразу от ключа в памяти компьютера до перезагрузки (т.е. вводить её нужно один раз при запуске машины, и до следующей перезагрузки ничего вводить не придётся).
Исходное положение:
1. Подразумевается что удалённый ssh сервер уже настроен для авторизации по ключу (это обычно так и есть)
2. Подразумевается что ssh-agent запускается автоматом (обычно это так и есть, проверить можно командой
3. Установлен пакет ssh-askpass (поставить можно командой
Алгоритм
1. генерим ключ
обязательно вводим парольную фразу, иначе потеря ключа будет означать выдачу злоумышленнику всех ваши
доступов
2. Копируем ключ на сервер
если юзеры на локальной машине и удалённом сервер разные, то необходимо указать и имя юзера —
3. Пользователям KDE для добавления ключей при логине в папку ~/.kde/Autostart добавляем скрипт add-keys.sh со следующим содержимым
Для пользователей GNOME есть описание.
Также для хранения ключей в памяти можно использовать keychain.
Завершаем сессию, входим и видим окно запроса парольной фразы, вводим её и пробуем зайти на сервер
или выполнить команду
При обычном интернет броузинге или скачивании файлов соответствующим софтом обрывов связи можно и не заметить, однако при работе с удалённым сервером по ssh при разрыве связи вы потеряете соединение, будут остановлены все выполняемые программы, например оборвётся запущенный скрипт, пропадут несохранённые изменения в текстовом редакторе и т.п.
Для решения этой проблемы существует программа screen, она остаётся запущенной даже при обрыве связи и сохраняет открытыми/запущенными все приложения которые запускались в ней.
Алгоритм
1. запускаем screen, с виду может ничего не поменяться, но
2. с помощью клавиатурных команд
создаём нужно число окон, запускаем в них нужные программы, логично выработать единую систему назначения окон на всех сервера (например в окне номер 1 иметь подключение к базе, в окне номер 2 логи и т.д.).
3. По каким-то причинам обрывается коннект
4. Заходим на сервер, выполняем:
и мы снова в том же скрине со всем приложениями в том же состоянии.
Дополнительно про screen читаем:
и много статей в сети, например эту.
Для копирования файлов на/с/между машинами существует утилита scp, утилита простая всё должно быть понятно по примеру копирования с текущей машины на удалённый сервер
с удалённого сервера на текущую (в текущую папку)
Для страдающих на MS Windows ®
есть PuTTY:
аналог GNU screen видимо тут.
Надеюсь кому-то будет полезным.
Описание тестировалось под Debian GNU/Linux с KDE, но должно подходить под основную массу unix систем/дистрибутивов/оконных менеджеров и графических сред.
Терминал
я использую yakuake — очень удобно быстро вызывать консоль по клавише (по умолчанию F12)
Авторизация
Важный принцип систем безопасности заключается в том, что они должны быть удобными, иначе ими не будут пользоваться, касательно ssh это означает, что для безопасности нужно пользоваться авторизацией по ключам с парольной фразой, а для удобства нужно хранить парольную фразу от ключа в памяти компьютера до перезагрузки (т.е. вводить её нужно один раз при запуске машины, и до следующей перезагрузки ничего вводить не придётся).
Исходное положение:
1. Подразумевается что удалённый ssh сервер уже настроен для авторизации по ключу (это обычно так и есть)
2. Подразумевается что ssh-agent запускается автоматом (обычно это так и есть, проверить можно командой
ps aux | grep 'ssh'
)3. Установлен пакет ssh-askpass (поставить можно командой
sudo aptitude install ssh-askpass
)Алгоритм
1. генерим ключ
ssh-keygen -b 4096 -t rsa
обязательно вводим парольную фразу, иначе потеря ключа будет означать выдачу злоумышленнику всех ваши
доступов
2. Копируем ключ на сервер
ssh-copy-id -i ~/.ssh/id_rsa.pub server.tld
если юзеры на локальной машине и удалённом сервер разные, то необходимо указать и имя юзера —
ssh-copy-id user@server.tld
3. Пользователям KDE для добавления ключей при логине в папку ~/.kde/Autostart добавляем скрипт add-keys.sh со следующим содержимым
#!/bin/bash
/usr/bin/ssh-add
Для пользователей GNOME есть описание.
Также для хранения ключей в памяти можно использовать keychain.
Завершаем сессию, входим и видим окно запроса парольной фразы, вводим её и пробуем зайти на сервер
ssh user@server.tld
или выполнить команду
ssh user@server.tld uname -a
Работа при неустойчивой связи
При обычном интернет броузинге или скачивании файлов соответствующим софтом обрывов связи можно и не заметить, однако при работе с удалённым сервером по ssh при разрыве связи вы потеряете соединение, будут остановлены все выполняемые программы, например оборвётся запущенный скрипт, пропадут несохранённые изменения в текстовом редакторе и т.п.
Для решения этой проблемы существует программа screen, она остаётся запущенной даже при обрыве связи и сохраняет открытыми/запущенными все приложения которые запускались в ней.
Алгоритм
1. запускаем screen, с виду может ничего не поменяться, но
echo $TERM
скажет что мы в скрине2. с помощью клавиатурных команд
Ctrl+A затем «c» – создать окно screen
Ctrl+A затем «K» – закрыть окно screen
Ctrl+A затем «p» – переключиться к предыдущему окну screen
Ctrl+A затем «n» – переключиться к следующему окну screen
Ctrl+A затем «"» – выводит меню со списком окон
Ctrl+A затем «number» – переходит на окно с нужным номером, нумерация с 0
создаём нужно число окон, запускаем в них нужные программы, логично выработать единую систему назначения окон на всех сервера (например в окне номер 1 иметь подключение к базе, в окне номер 2 логи и т.д.).
3. По каким-то причинам обрывается коннект
4. Заходим на сервер, выполняем:
screen -d -RR
и мы снова в том же скрине со всем приложениями в том же состоянии.
Дополнительно про screen читаем:
man screen
и много статей в сети, например эту.
Обмен файлами
Для копирования файлов на/с/между машинами существует утилита scp, утилита простая всё должно быть понятно по примеру копирования с текущей машины на удалённый сервер
scp backdoor.sh user@server.tld:/home/user/
с удалённого сервера на текущую (в текущую папку)
scp user@server.tld:/etc/passwd .
Для страдающих на MS Windows ®
есть PuTTY:
- PuTTY (ssh клиент)
- PSCP (SCP клиент)
- Pageant (аналог ssh-agent)
- PuTTYgen (генератор ключей)
аналог GNU screen видимо тут.
Надеюсь кому-то будет полезным.