Pull to refresh

Удобная и безопасная работа с серверами по ssh

Reading time 3 min
Views 7.6K
Так как по работе приходится много удалённо работать с unix серверами, то пришлось разобраться как это делать комфортно и безопасно и со временем возникло желание поделиться. Данная заметка не претендует на новизну информации, но мне показалось что нигде нет цельного руководства, нечто похожее есть только на английском.
Описание тестировалось под 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 видимо тут.

Надеюсь кому-то будет полезным.
Tags:
Hubs:
+5
Comments 39
Comments Comments 39

Articles