Так как по работе приходится много удалённо работать с 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.tld3. Пользователям 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 видимо тут.
Надеюсь кому-то будет полезным.
