Твой софтовый форум > Global News > Новости, интересные факты и их обсуждение > Статьи

А давайте подружимся с SSH?

Дата публикации: 04.11.2009 - 10:53
~karlson~
А давайте подружимся с SSH?


Многие мои знакомые так или иначе используют протокол SSH (заходя на свои роутеры, веб хостинги и непосредственно на собственные компьютеры дома и в офисе), при этом не все об этом знают.

Я расскажу о нескольких стандартных возможностях, не открою ничего нового и сакраментального администраторам, но простые пользователи существенно упростят себе работу и, возможно, даже начнут активнее пользоваться этим великолепным протоколом.

В этой заметке вы узнаете:

* как прописать псевдонимы для соединений
* как настроить авторизацию без пароля
* как передавать файлы по SSH
* как запускать графические приложения по SSH
* а так же получите общие советы по опциям SSHD

Используем псевдонимы

Чтобы подключиться к удаленному компьютеру или роутеру, можно воспользоваться клиентом ssh, который есть во всех популярных операционных системах, будь то Linux или MacOSX. Вам необходимо знать IP адрес или хостнейм машины, к которой будете подключаться, порт, который прослушивает SSH демон (sshd, по умолчанию 22), а так же актуальные логин и пароль, под которыми разрешено подключение.

Цитата | Quote
ltsony — ноутбук
home — домашний компьютер

    babl@ltsony:~$ ssh -l babl -p 22 babl.starlink.ru
    Password:
    Linux localhost 2.6.30-1-686-bigmem #1 SMP Sat Aug 15 20:10:47 UTC 2009 i686

    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 Nov 3 12:12:31 2009 from articleness.incense.volia.net
    babl@home:~$


далее все действия на клиенте

Согласитесь, ssh -l babl -p 22 babl.starlink.ru команда довольно длинная и даже более короткий вариант ssh [email protected] не делает ее более приятной, когда приходится по несколько раз в день заходить на одни и те же компьютеры.

Создадим (если его нет) файл ~/.ssh/config со следующим содержимым:

Цитата | Quote
   Host bbh
    HostName babl.starlink.ru
    User babl
    Port 22



Выполняем:

Цитата | Quote
babl@ltsony:~$ ssh bbh
    Password:
    Linux localhost 2.6.30-1-686-bigmem #1 SMP Sat Aug 15 20:10:47 UTC 2009 i686

    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 Nov 3 12:12:31 2009 from articleness.incense.volia.net
    babl@home:~$


Итого задачу себе немного упростили. Что можно сделать дальше? Согласитесь, вводить пароль каждый раз при попытке войти на один и тот же компьютер — занятие радости доставляющее не так много, как хотелось бы.

Авторизация по ключу

В этой части заметки мы создадим публичный ключ, передадим его на сервер и будем входить по нему без пароля.

Для начала проверим необходимые опции:
на клиенте (/etc/ssh/ssh_config):

Цитата | Quote
# StrictHostKeyChecking ask
    # IdentityFile ~/.ssh/identity
    IdentityFile ~/.ssh/id_rsa
    # IdentityFile ~/.ssh/id_dsa
    # Port 22


на сервере (/etc/ssh/sshd_config):

Цитата | Quote
RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile %h/.ssh/authorized_keys


Лирическое отступление

Стоит так же обратить внимание на такие параметры sshd_config:

PermitRootLogin no - разрешить пользователю root логиниться по SSH. Лучше запретить, так как действительно права рута нужны не так часто, а повысить свои привилегии можно с помощью того же sudo. К тому же в этом случае имя пользователя так же для злоумышленника будет загадкой, а root стандартен везде.
На крайняк можно описать следующую конструкцию:

Цитата | Quote
PermitRootLogin no
    Match Host 192.168.0.*,127.0.0.1
     PermitRootLogin yes


В этом случае рут сможет залогиниться только из указанных подсетей.

PermitEmptyPasswords no - разрешить использовать пустые пароли. Так же плохой вариант, фактически пустой пароль сводит всю защиту на нет, так что и разрешать его в общем-то не стоит.

AllowUsers - указывает список пользователей, под которыми можно входить по SSH. Крайне рекомендую использовать эту опцию! Если ее нет в конфиге - создайте. AllowUsers babl,vasya

Port - указывает прослушиваемый демоном SSHD порт. Стандартный 22, первый в списке искомых злоумышленником. Советую сменить его на что-то выходящее за пределы 1024 или еще лучше, за пределы 10000. К примеру поставить 33333, легко запоминается, а вот nmapом фиг достанешь.

создадим ключ командой ssh-keygen -t rsa

Цитата | Quote
  babl@ltsony:~$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/babl/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/babl/.ssh/id_rsa.
    Your public key has been saved in /home/babl/.ssh/id_rsa.pub.
    The key fingerprint is:
    13:35:3b:4c:34:d4:86:85:aa:f5:da:e5:b7:25:00:b7 babl@ltsony
    The key's randomart image is:

    +--[ RSA 2048]----+                                          
    |               o.+o o+|                                          
    |               o o .o +|                                          
    |                . = . .. |                                          
    |                 . +o.   |                                          
    |               S  oE.   |                                          
    |                   ..  .  .|                                          
    |                     o.o.|                                          
    |                    . .oo|                                          
    |                       ...|                                          
    +-----+


Итак, введя ssh-keygen -t rsa и ответив на несколько простых вопросов, мы создали публичный ключ нашего клиента: /home/babl/.ssh/id_rsa.pub. Теперь необходимо этот ключ запихнуть на сервер в домашнюю директорию пользователя, под которым мы логинимся, в файл ~/.ssh/authorized_keys. Путей это сделать множество, но я настоятельно рекомендую использовать скрипт ssh-copy-id, как правило входит в пакет openssh-client.

Цитата | Quote
babl@ltsony:~$ ssh-copy-id bbh
    Password:
    Now try logging into the machine, with "ssh '[email protected]'", and check in:

    .ssh/authorized_keys

    to make sure we haven't added extra keys that you weren't expecting.


Проверяем:

Цитата | Quote
babl@ltsony:~$ ssh bbh
    Linux localhost 2.6.30-1-686-bigmem #1 SMP Sat Aug 15 20:10:47 UTC 2009 i686

    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 Nov 3 12:12:31 2009 from articleness.incense.volia.net
    babl@home:~$


ну что же, поздравляю, теперь мы можем входить на удаленный терминал одной маленькой командой и без надобности вводить сложные пароли. Безусловно, если Вы будете подключаться с другой машины — ключа там не будет и ssh попросит ввести пароль.

Подводные камни

Часто бывает что вместо заветного входа в удаленную систему, Вы получаете все тот же запрос на ввод пароля. Что следует делать в этом случае?
1. не паниковать.
2. запустить с клиента:
ssh -v [email protected]
и посмотреть полный вывод попытки установить соединение.

Цитата | Quote
debug1: Authentications that can continue: publickey,password
    debug1: Next authentication method: publickey
    debug1: Offering public key: /home/babl/.ssh/id_rsa
    debug1: Authentications that can continue: publickey,password
    debug1: Next authentication method: password


Опа… ключик то послали, а сервер отверг, сказал пошли дальше пробовать и вводи ка пароль, парень!

Идем на сервер, смотрим /var/log/auth.log

Цитата | Quote
Nov 3 10:38:54 localhost sshd[14846]: Authentication refused: bad ownership or modes for directory /home/babl


и понимаем, что SSH демон довольно параноидальный и заботится о том, чтобы соединение по ключу было доступно ТОЛЬКО нужному пользователю. Внимательно осматриваем права доступа к домашней папке и непосредственно к файлам в ~/.ssh и видим, к домашней папке, к примеру, есть права на запись у всех — ssh это не понравилось и демон отверг вход по ключу, посчитав его небезопасным. Выставляем стандартные права 0755 и вуаля:

Цитата | Quote
debug1: Authentications that can continue: publickey,password
    debug1: Next authentication method: publickey
    debug1: Offering public key: /home/babl/.ssh/id_rsa
    debug1: Server accepts key: pkalg ssh-rsa blen 277
    debug1: read PEM private key done: type RSA
    debug1: Authentication succeeded (publickey).


все работает!

На всякий случай, корректные права:

Цитата | Quote
drwxr-xr-x 135 babl babl 16384 Ноя 2 19:07 /homd/babl
-rw------- 1 babl babl 792 Ноя 3 10:15 /home/babl/.ssh/authorized_keys


Работаем с файлами по SSH

Я встречал людей, которые держат веб или фтп серверы для того, чтобы периодически кидать себе домой несколько файлов или же забирать их оттуда. При этом они по SSH копируют файл в веб/фтп папки и потом скачивают их браузером или wget'ом, но ведь все можно сделать гораздо проще… Если Вы делаете так же — этот пункт для Вас!

Приложение scp входит в комплект openssh-client и работает по своей сути как и программа cp, но при этом позволяет использовать SSH адреса. Рассмотрим пример:

Цитата | Quote
babl@ltsony:~$ scp [email protected]:/mnt/gtb1*.avi ./
    Password:
    gtb12.avi             100%   41MB 412.4KB/s   01:42   
    gtb13.avi             100%   41MB 422.9KB/s   01:39   
    babl@ltsony:~$ 


Я скачал на ноутбук 2 файла, которые находятся по адресам:
/mnt/gtb12,avi
/mnt/gtb13,avi
на моем домашнем компьютере. При этом /mnt не смотрит в веб или фтп, но у пользователя babl есть к нему доступ и права на чтение этих файлов. Другими словами Вы можете получить любой файл, к которому может дотянуться Ваш пользователь на целевой системе, указав адрес вида:
login@host:/путь_к_файлу

С учетом того, что мы сделали ранее (авторизация без ключа и прописанный псевдоним) — все становится совсем просто

Цитата | Quote
scp bbh:/mnt/gtb1*.avi ./
    gtb12.avi             100%   41MB 412.4KB/s   01:42   
    gtb13.avi             100%   41MB 422.9KB/s   01:39   
    babl@ltsony:~$ 


Замечательная возможность приложения состоит еще и в том, что SSH адрес можно указать не только в качестве источника, но и в качестве назначения. Так же часто используемой опцией может стать -r, позволяющая (с/за)качивать рекурсивно папки со всем их содержимым.

Перенаправляем Х11 приложения

На сервере в /etc/ssh/sshd_config подключаем следующую опцию:

Цитата | Quote
   X11Forwarding Yes


Теперь введя на клиенте:

Цитата | Quote
    ssh -Y bbh kate


мы увидим окно редактора kate (пример чисто символический, можно было вызвать и gedit и даже eclipse), который физически будет работать на хосте bbh (домашний компьютер), но отображаться у нас на ноутбуке. Так можно поступить практически с любым графическим приложением, полезно бывает.

Извращаемся

SSH поистине может творить чудеса! Так как клиент может выполнять приложения на удаленном сервере и при этом напрямую передавать в них поток — открываются большие возможности для управления всем чем угодно. Вот несколько примеров, буду рад если пригодятся в жизни, но их основная задача — показать что есть куда копать и стоит это делать.

Упаковываем директорию и копируем на удаленный хост с распаковкой, все это происходит налету и без использования scp:

Цитата | Quote
$ tar cf - /путь_к_источнику | ssh [email protected] "(cd /путь_к_папке_назначения; tar xpf -)"


и на локальный:

Цитата | Quote
$ ssh [email protected] "tar cf - /путь_к_источнику" | (cd /путь_к_папке_назначения; tar xpf -)


так же можно было дописать свой rsa ключ на сервер не с помощью ssh-copy-id, а выполнив:

Цитата | Quote
  $ cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"


P.S.: Желаю удачи в освоении таких сложных на первый взгляд и таких полезных на второй утилит, как SSH.
merlin_zaraza
Цитата | Quote
который есть во всех популярных операционных системах, будь то Linux или MacOSX


и особенно популярной виндовс biggrin.gif
ЭЖД
Цитата | Quote(merlin_zaraza @ 4.11.2009 - 11:05)
Цитата | Quote
который есть во всех популярных операционных системах, будь то Linux или MacOSX


и особенно популярной виндовс biggrin.gif
*


ph34r.gif а что это за система такая? huh.gif
в виндовс есть ни разу небезопасный telnet, хотя МС так не считает.
еще есть сторонняя разработка PuTTY (клиент)
Dark_LemON
SSH под виндой прекрасно существует. Сам юзал winsshd пару лет назад, когда надо было через виндовую машину ходить на линуксовый шлюз. . А список SSHd под винду вот _http://www.sysadmin.m...r-windows.html


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: А давайте подружимся с SSH?
SoftoRooM © 2004-2024