Friday, October 17, 2014

SSH для простых смертных: настройка и использование SSH в Linux



В сети много документов по настройке SSH для удалённого управления Linux и BSD-системах, но часто в них умалчиваются простые вещи. В этом посте я расскажу о простом использовании клиента SSH и настройке удалённого доступа. 




Установка SSH в Linux на примере Debian
Итак, всё, что нам нужно для установки полного комплекта удалённого управления компьютером (SSH-клиент и SSH-сервер) давным-давно лежит в репозитории. Лёгким движением ставим пакет:

# apt-get install ssh
и ждём несколько мгновений, когда оно настроится. После этого мы получим возможность SSH доступа в систему и управления ей. Так как технология эта кросс-платформенная, то можно управлять по SSH Linux или FreeBSD можно и из Windows. Для этого есть putty, SSH Windows клиент.

На стороне клиента
Теперь надо поправить настройки, которые лежат в каталоге /etc/ssh - конфиг для клиента называется ssh-config, конфиг для сервера, соответственно, sshd-config. На своей, клиентской, стороне, настраиваем возможность приёма X11Forward, ищем и меняем ключи на:
ForwardX11 yes
ForwardX11Trusted yes
Клиентская машина теперь может запускать удалённо графические приложения на сервере. Настройка SSH на стороне клиента закончена, теперь идём к админу далёкого сервера...
В принципе, можно на клиентской стороне ничего не менять, а логиниться на удалённую машину так: 
$ ssh -X user@server1.mydomain.com
или
$ ssh -X user@192.168.x.x
если лезть в конфиги на своей стороне не хочется, но у меня это почему-то не работало...

На стороне сервера
Теперь нужно настроить SSH сервер: в конфигах машины-сервера, к которой будем подсоединяться (у вас ведь есть её рутовый пароль, так ведь?) в /etc/ssh/sshd-config ищем и меняем ключи на:
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
Этим мы разрешаем серверу запускать удалённо графические приложения и отправлять их на клиентскую машину. Перестартуем сервис:
sudo /etc/init.d/ssh restart
Теперь мы сможем заходить на машину не только в консольном режиме, но и с запуском иксовых приложений.

Если хочется разрешить вход только с определённых машин, нужно подправить строки в конфиге /etc/ssh/sshd_config
AllowUsers hacker@*

AllowUsers *@192.168.1.*
Впрочем, это уже для более продвинутых товарищей.

SSH в действии
Всё готово, и теперь я приведу несколько команд SSH для примера. Открываем консольку и пишем в ней:
$ ssh имя_пользователя_удалённой_машины@ip_адрес_или_сетевое_имя_удалённой_машины
Например, в моём случае, когда я захожу удалённо на ноутбук, пишу ssh beast@192.168.1.5 - так как у меня не настроен сервер имён, пишу адреса. Опять-таки, доступ по SSH может быть не только из Linux или FreeBSD, но и из Windows - при помощи putty.

После этого нас могут спросить: данный айпишник ещё не опознан, как доверительный, стоит ему доверять? Пишем yes, стоит, конечно! :-) Далее вводим пароль пользователя удалённой машины, под которым мы заходим и, если он правильный, попадаем в консольудалённой машины. В процессе набора пароля вы его не увидите - набирайте всё равно; даётся три попытки - потом соединение обрывается.

Итак, нас поприветствуют как-то вроде этого:

penta4@penta4rce:~$ ssh beast@192.168.1.5
Password:
Linux notebeast 2.6.15.7 #3 PREEMPT Sun Jul 2 12:51:07 MSD 2006 i686 GNU/Linux
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Last login: Tue Oct 10 19:23:57 2006 from 192.168.1.1
beast@notebeast:~$
Теперь, в окошке терминала, который на нашей машине, мы рулим компьютером, к которому мы подключились. Не перепутайте терминалы, а то вырубите не тот компьютер :-) Здесь всё просто и логично, но нам бы хотелось ещё и запускать графические приложения на удалённой системе. Легко!

Запуск графических приложений удалённо
Вводим, как обычно, логин и пароль удалённой машины. И вот перед нами та же самая консоль. Как вызвать графическое приложение? Просто наберите имя вызываемой программы и поставьте после имени знак амперсанд:

$ gimp &;
Это запустит на удалённой машине GiMP в фоне и вернёт вам консоль для дальнейших действий. Если вы не поставите амперсанд после имени приложения, то управление в консоль будет возвращено только после завершения приложения.

На приведённом скриншоте: слева gimp, запущенный на "родной" машине, справа - на удалённой. Кнопочки чуть разные из-за того, что на удалённой машине другие настройки gimp. В остальном - как родной.

Итак, у вас запустится графическое приложение точно так же, как если бы оно работало у вас. Есть одно но: это приложение будет работать на вашем экране, но с документами и настройкамиудалённой машины. Если файл для обработки находится в вашем домашнем каталоге, то его нужно будет передать на удалённую машину. Оно (и другие приложения, которые вы запустите) будет работать ровно до того момента, пока открыто ssh-соедиение. Туда же, в консольку ssh-соединения, будут выдаваться служебные сообщения запускаемых вами приложений.


Заключение
Ну вот, как выясняется, удалённое соединение и работа по SSH может быть полезна и простым смертным, а не только бородатым админам. Очень удобно, например, быстренько влезть на компьютер коллеги и помочь ему в чём-то (прочитать логи, например), тихо и незаметно поставить софт, или просто загрузить чем-то полезным простаивающую машину. В общем, много применений.

Так как пост делался с упором на простого пользователя, тут не рассматривается шифрованное копирование файлов и прочие тонкости. Они есть на русском в виде краткого описания настройки SSH, а ещё очень подробная статья с nixp. Хорошая справка (правда, на английском) здесь и тут. Думаю, что этого хватит.

57 комментариев: |высказаться!| RSS-лента дискуссии.|
serhiy cherevko комментирует...
Прикольно все расписано. Очень доходчиво. Я у себе делал почти все также.
В целях большей защиты, желательно поменять стандарный порт. Потом через аругмент -p его задавать. Если пользуетесь лишь одним сервером, то можно сделать alias, чтобы все время не набирать все эти ip имена и порты. Ну или пользоваться history | grep ssh ,а потом просто !№процесса.
virens комментирует...
2 serhiy cherevko
Прикольно все расписано. Очень доходчиво.
Спасибо :-) Просто я долго не мог понять, как запускать графические программы через ssh. Я думал, что это типа RemoteDesktop, а оно вон как :-)
В манах и других статьях про это не говорится вообще или мельком - ну все ж вроде знают...

В целях большей защиты, желательно поменять стандарный порт.
Да-да, это верно. Но простым смертным это уже слишком - или тогда это бородатые админы. :-)

Кстати, в вашем блоге почему-то пропала возможность оставлять комментарии гражданам с Blogger. Только с гугловского аккаунта. Это фича такая?
serhiy cherevko комментирует...
>Кстати, в вашем блоге почему-то пропала >возможность оставлять комментарии гражданам >с Blogger

Вы уже второй, кто об этом пишет. Я не знаю. Это не фича. По крайней мере не моя. Щас пойду в Blogger Help искать. А как на счет других блогов на Blogger Beta? Или это только у меня такое?
serhiy cherevko комментирует...
Нашел. Это глюк у Blogger beta.Оставил свои замечания. Думаю скоро исправят. Вообще он часто глючит. Несколько дней назад никто не мог загрузить картинки при публикации. Решили. И это решат
Roman Lagunov комментирует...
В Etch будет два пакета ssh - openssh-client, и openssh-server. Первый соответственно клиент, второй - сервер.

Мне сервер без надобности, так что я поставил себе openssh-client из backports.org - и телемаркет.

И для того, что бы не набирать все время ip очень и нестандартные порты, имена пользователей и т.д., редактируем ~/.ssh/config.

Так же, редактировать /etc/ssh/ssh_config для клиента нет необходимости, вообще-то. Опять же, редактируем ~/ssh/config.

За подробностями - man ssh_config.

Хочу только сказать, что у меня все настроено так для конкретной машины - порт, имя пользователя, файл Identity, и ip этой машины.

Еще есть такая интересная фича - ее стоило бы в статье рассмотреть - возможность логина без ввода пароля, с помощью ключей.
virens комментирует...
2 Anonymous
Такие вопросы задаются по личной почте, которая есть в профиле, а не в комментах на блог.
есть проблема вот в чем: когда пытаюсь запустить там иксы
Дальше можно не писать: я же написал в посте,что иксы там запускать НЕ НАДО, а НАДО запускать приложение иксовое. И всё будет ОК.
virens комментирует...
2 Roman Lagunov
В Etch будет два пакета ssh - openssh-client, и openssh-server. Первый соответственно клиент, второй - сервер.
Этч ещё не скоро :-) Когда выйдет - пост поправлю. Спасибо

Еще есть такая интересная фича - ее стоило бы в статье рассмотреть - возможность логина без ввода пароля, с помощью ключей. 
Не в этм посте, а то для простых смертных это перебор :-) Но предложение учёл, буду писать (когда сам попробую :-))
jankkhvej комментирует...
Не -X, а -Y:
[...]
-Y Enables trusted X11 forwarding. Trusted X11 forwardings are not
subjected to the X11 SECURITY extension controls.
[...]
jankkhvej комментирует...
Логины с ключами - вообще бином ньютона ;)

на машине, откуда пойдём:
$ ssh-keygen -t dsa

- соглашаемся с местом хранения и вводим пустой пароль, просто жмём Enter.

Далее публикуем наш публичный ключ на машину, куда будем идти. Тут же, на нашей исходной машине:

cat ~/.ssh/id_dsa.pub | ssh user@remote.host.com "cat - >> .ssh/authorized_keys"

Последний раз ;) вводим пароль на удалённую машину.
Всё, публичный ключ нашего аккаунта на локальной машине добавлен в список авторизованных ключей аккаунта user на удалённом хосте.

Можно проверить: ssh user@remote.host.com не должен спрашивать пароля.

PS: два cat в одной команде наверняка можно заменить чем-то более правильным, чтобы не было Ещё Одного Бесполезного Использования Cat (тм).
serhiy cherevko комментирует...
Respect земляку jankkhvej. Все проделал как вы написали. Поскольку использую нестандартный порт, то просто дописал через -p. Все работает. Раньше как-то об этом не задумывался. Читал, но разбираться не хотел. Но как на счет безопасности? что безопасней? Для меня это не проблема, но в случае системных администраторов, это важно.
Анонимный комментирует...
Не в тему.
Я писал тебе писмо, насчет рассылки дисков. Рассылка закончена или просто письмо не прочитал?
krivakin@km.ru
jankkhvej комментирует...
С точки зрения прослушки по сети - безопасно что ключ, что пароль.
Если грамотно организована безопасность вообще - так, что никто не может украсть личный ключ из id_dsa - то ключи, очевидно, безопаснее паролей.
Одним из признаков хорошего сисадмина является использование везде ssh и ключей, с доступом к ssh только с определённых хостов и с запрещённой парольной аутентификацией.
Нестандартный порт - не помеха хакерам, а лишь неудобство пользования.
virens комментирует...
Да, намечается ещё один пост про SSH, на основе заметок, оставленных в комментариях. За что уважаемым комментаторам огромное спасибо.
Сейчас у меня мало времени, к концу года "подбиваю бабки", но пост будет.
Ещё раз огромное спасибо за ценные комментарии. Если чт ещё вспомните - милости просим.
Анонимный комментирует...
Сделал по инструкции (в качестве клиента использовал Mac OS X с установленным X11, в качестве сервера -- Debian Etch). Всё отлично работает. Спасибо!

Но вот такой вопрос возник. Если я хочу удалённо не просто приложения позапускать, а прямо в среде Gnome поработать -- как это сделать кошерно? Пока тупо запускал "nautilus&" и "gnome-panel&" -- и вроде всё работало, но не уверен, что это исчерпывающе и кошерно. Какие мануалы изучать?
Adin комментирует...
Используй Vncserver
rkuksa комментирует...
Если я хочу удалённо не просто приложения позапускать, а прямо в среде Gnome поработать
внц запускать не unixway
/usr/bin/gdmXnest

No comments: