- PVSM.RU - https://www.pvsm.ru -
В этой статье собраны наши лучшие приемы для более эффективного использования SSH. Из нее вы узнаете как:
Второй фактор аутентификации к своим SSH соединениям можно добавить пятью разными способами:
ssh –V
можно проверить клиентскую версию SSH, а серверную — командой nc [servername] 22
$ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk
Она создаст открытый и секретный ключи и привяжет их к вашему U2F устройству. Задача секретного ключа на U2F устройстве — расшифровывать секретный дескриптор ключа на диске при активированном ключе шифрования.
Кроме того, в качестве вторичного фактора вы можете предоставить кодовую фразу для ваших ключей.
Ключ-резидент это еще один поддерживаемый OpenSSH тип генерации -sk-ключей. При таком подходе дескриптор хранится на U2F устройстве и позволяет вам иметь его при ключе шифрования когда потребуется. Создать ключ-резидент можно командой:
$ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_sk
Затем, для возврата дескриптора обратно в память на новом устройстве, вставьте ключ шифрования и запустите команду:
$ ssh-add -K
При подключении к хосту вам все еще нужно будет активировать ключ шифрования.
В SHH agent forwarding позволяет удаленному узлу получить доступ к SSH агенту вашего локального устройства. Когда вы пользуетесь SSH с включенным agent forwarding (обычно через ssh -A), в соединении будет два канала: ваша интерактивная сессия и канал для agent forwarding. Через этот канал Unix-сокет, созданный вашим локальным SSH-агентом, соединяется с удаленным узлом. Это рискованный метод, так как пользователь с root доступом на удаленном устройстве может получить доступ к вашему локальному SSH-агенту и потенциально выдавать себя в сети за вас. Пользуясь стандартным SSH-агентом из комплекта Open SSH, вы даже не узнаете, что это случилось. Наличие U2F ключа (или Sekey) поможет вам эффективно заблокировать любые попытки воспользоваться вашим SSH агентом извне.
Даже с такой мерой предосторожности будет хорошей идеей как можно реже использовать agent forwarding. Не стоит пользоваться им на каждой сессии — пользуйтесь agent forwarding только когда вы уверены в его необходимости для текущей сессии.
Прерывание сети, бесконтрольное поведение программ, или управляющая последовательность, которая блокирует ввод с клавиатуры — все это возможные причины разрыва SSH-сессии.
Закончить зависшую сессию можно несколькими способами:
ServerAliveInterval 5
ServerAliveCountMax 1
ssh будет отправлять echo удаленному узлу каждые ServerAliveInterval секунд для проверки соединения. Если более ServerAliveCountMax эхо не получат ответа, ssh закончит соединение по таймауту и выйдет из сессии.
Почему вообще случаются зависшие сессии? Во времена создания интернета компьютеры редко двигались с места на место. Когда вы пользуетесь ноутбуками и переключаетесь между несколькими IPv4 сетями WiFi, ваш IP-адрес меняется. Так как SSH полагается на TCP соединения, а те, в свою очередь, полагаются на конечную точку со стабильным IP-адресом, всякий раз как вы переключаетесь между сетями, ваши SSH соединения упускают дескриптор сокета и фактически теряются сами. Когда меняется ваш IP-адрес, вашему сетевому стеку требуется время чтобы обнаружить потерю дескриптора. Когда возникают сетевые неполадки, мы не хотим чтобы один из узлов в TCP-соединении прервал его слишком рано. Поэтому протокол будет пробовать переотправить данные еще несколько раз прежде чем наконец сдастся. Тем временем, в вашем терминале сессия будет выглядеть вставшей. IPv6 добавляет несколько связанных с мобильностью особенностей, которые позволяют устройству сохранять домашний адрес во время смены сети. Возможно, однажды это перестанет быть такой уж проблемой.
Есть два различных подхода к тому, как сохранить соединение при переходе между различными сетями или желании ненадолго отключиться.
1. Воспользоваться Mosh [1] или Eternal Terminal [2]
Если вам действительно нужно соединение, которое не спадает, даже когда вы переключаетесь между сетями, используйте мобильную оболочку Mosh. Это защищенная оболочка, которая сначала использует SSH-рукопожатие, а затем переключается на свой собственный зашифрованный канал на все время сессии. Так Mosh создает отдельный, очень стойкий и защищенный, канал, который в состоянии выдержать и прерывания интернета, и смену IP-адреса вашего ноутбука, и серьезные разрывы сети, и многое другое, и все это благодаря магии UDP-соединений, а так же применяемому Mosh протоколу синхронизации.
Для использования Mosh вам нужно будет установить его и на клиент, и на сервер, и открыть порты 60000-61000 для несвязного UPD-трафика до вашего удаленного хоста. В дальнейшем для соединения достаточно будет использовать mosh user@server
.
Mosh оперирует на уровне экранов и нажатий клавиш, что дает ему ряд преимуществ перед пересылающим бинарный поток стандартного ввода и вывода между клиентом и сервером SSH. Если нам требуется синхронизировать только экраны и нажатия клавиш, то позднее восстановить прерванное соединение становится намного проще. В то время как SSH будет буферизировать и отправлять все что произошло, Mosh достаточно буферизировать нажатия клавиш и синхронизировать последний кадр окна терминала с клиентом.
2. Использовать tmux
Если вам хочется «приходить и уходить когда вздумается» и держать сессию терминала на удаленном узле, воспользуйтесь мультиплексером терминала [3] tmux
. Я обожаю tmux и пользуюсь им постоянно. Если ваше SSH-соединение прервалось, то чтобы вернуться в свою tmux сессию достаточно просто переподключиться и ввести tmux attach
. Кроме того, в нем есть такие чудесные функции как внутритерминальные вкладки и панели, аналогичные вкладкам в iOS терминале, и возможность делиться терминалами с другими.
Некоторые любят приукрасить свой tmux с помощью Byobu, пакетом который значительно улучшает удобство использования tmux и добавляет в него много сочетаний клавиш. Byobu поставляется вместе с Ubuntu, и его легко установить на Mac через Homebrew.
Иногда при отладке сложных проблем на ваших серверах может возникнуть желание разделить сессию SSH с кем-то, кого нет в одной с вами комнате. tmux идеально подходит для такой задачи! Достаточно сделать всего несколько шагов:
Если вам хочется более изощренных многопользовательских tmux сессий, попробуйте tmate, это форк tmux который значительно упрощает совместные сессии терминала.
Автор: ITSumma
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssh/352615
Ссылки в тексте:
[1] Mosh: https://mosh.org/
[2] Eternal Terminal: https://eternalterminal.dev/
[3] мультиплексером терминала: https://github.com/tmux/tmux/wiki
[4] Источник: https://habr.com/ru/post/499920/?utm_source=habrahabr&utm_medium=rss&utm_campaign=499920
Нажмите здесь для печати.