Secure Shell или SSH - это сетевой протокол, который позволяет обмениваться данными c использованием защищенного канала между двумя сетевыми устройствами. Две основные версии протокола, называются SSH1 (или SSH-1) и SSH2 (или SSH-2). Используется в основном на Linux и UNIX системах и основан на доступе к командной строке аккаунта]. Говоря простым языком, вы получаете командную строку] на удаленном компьютере и можете делать все то же, что у на своем компьютере в терминале. SSH был разработан в качестве замены Telnet и других небезопасных удаленных оболочек, которые посылают информацию (в частности пароли) в открытом виде, что делает их восприимчивыми к взлому. Шифрование по SSH предназначено для обеспечения конфиденциальности и целостности данных при передаче по незащищенной сети, таких как Internet.

SSH использует открытый ключ шифрования для аутентификации удаленного компьютера и позволяют ему провести проверку подлинности пользователя. SSH обычно используется для входа на удаленную машину и выполнения команд, но он также поддерживает туннелирование, TCP и X11 соединения. Он так же может передавать файлы с помощью SFTP или SCP. Для SSH-сервера стандартно был назначен порт 22. SSH-клиенты обычно используется для установления соединения с SSH-сервером. Оба они присутствует на большинстве современных операционных систем, включая Mac OS X, Linux, FreeBSD, Solaris и OpenVMS.


Проблемы и их решение

как разрешить соединение для root только по ключам

разрешаем root заходить (в конфиге):

PermitRootLogin yes

перегружаем SSHD:

/etc/init.d/sshd restart

генерим сертификаты у root

ssh-keygen

отсылаем сертификаты:

ssh-copy-id root@wikiadmin.net

разрешаем теперь только ключём:

PasswordAuthentication yes

PermitRootLogin without-password

перегружаем SSHD:

/etc/init.d/sshd restart

Создаём config для работы по SSH для собственного удобства

Действие простое. В файл ~/.ssh/config добавляем

Host serv2 HostName 127.0.0.1 Port 22 User root

И авторизуемся просто

ssh serv2

rsync, например, будет выглядеть так:

rsync -av --progress --partial /home/test/ serv2:/home/test

Перенаправление на машинку, которая находится в локальной сети и недоступна снаружи

Есть: внешний сервер serv и внутреняя машинка ws. Нужно иметь возможность подключаться к машинке ws извне.

Решение: на внутренней машинке ws создаём тоннель к внешней:

1
ssh -f -N username@wikiadmin.net -R 2210:127.0.0.1:22

На внешне машинке wikiadmin.net появляется открытый порт 2210, который перенаправляет все запросы на недоступную извне машинку ws на 22 порт.

Проблема: долго запрашивается пароль

После введения логина несколько секунд ожидания, пока не возникнет запрос password. Добавьте в конец файла настроек (в Ubuntu /etc/ssh/sshd_config) следующие строки:

1
2
 UsePAM no
 UseDNS no

Если какой-либо из этих параметров есть, измените yes на no

Сессии отваливаются в Putty через некоторое время ввиду короткого таймаута.

Такое бывает, если некоторое время соединение не активно. Пусть Putty периодически отправляет пустые пакеты для поддержания связи. Это можно сделать в

Connection - Seconds between keepalives

Поставьте отправку 1 пакетика раз в 60 секунд, этого будет более чем предостаточно.

Закрываем заход пользователя root

Создаём пользователя, который будет заходить на сервер, и добавляем ему пароль.

В /ets/ssh/sshd_config выставляем значение

PermitRootLogin no

Перезапускаем sshd (не выходя из консоли, чтобы проверить заход нового пользователя. Ведь если будет что-то не так, то зайди обратно под root будет проблематично)

Заходим под новым пользователем в отдельной консоли, с помощью su - логинимся под рутом. Если всё ок, то консольку с root можно закрыть.

Как выйти из SSH

просто! Жмём

Ctrl+D

до победного конца или набираем

exit

для той же цели.

Как примонтировать с помощью SSHFS

Итак, есть у нас в наличии два компьютера с операционной системой Linux. И, как это часто бывает, нужно по сети скинуть с одного компьютера ряд файлов на другой. Можно конечно поднять SAMBA, но вот как-то это не совсем удобно и небезопасно плодить лишние открытые порты. Я предлагаю для этих дел воспользоваться SSH. Безопасно и есть почти на всех линукс-машинах.

Например, у нас есть 2 пациента. Первый - основной компьютер. Второй - ноутбук. Представим, что на каждом есть пользователь user и надо перекинуть файл file.avi из домашней директории пользователя user на компьютере в такую же директорию на ноутбук. Думаю, условия понятны. Конечно, для того, чтобы задействовать SSH, мы можем воспользоваться [scp], mc (midnight commander) или в nautilus в меню “Файл” выбрать “Подключиться к серверу…”, но это темы уже других статей.

Итак, нам нужно в первую очередь узнать IP адреса компьютеров. Если знаете - шаг пропускаем. Если нет - в командной строке (в терминале) набираем ifconfig и смотрим адрес у eth0 (если по локальной сети копируете) или wlan0 (если по wi-fi). Допустим, у основного компьютера адрес оказался 192.168.0.1, у ноутбука - 192.168.0.2

Отлично. Теперь определимся - мы будем с ноута подсоединятся к рабочему компьютеру или с рабочего к ноуту? Разница лишь в указании IP, поэтому просто выбираем первый вариант.

Будем подключатся с ноута к десктопу, чтобы “коммуниздить” там заветный файлик. А теперь определимся, а есть ли на компьютере сервер ssh, к которому мы и хотим подключится. Итак, на рабочем компьютере задаем команду:

sudo netstat -antpu | grep ssh

И, если видим строчку

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2032/sshd

все ок, мы сможем продолжить. Если нет - надо поставить ssh-server, который вы можете благополучно найти в том же synaptic или другом менеджере пакетов. Поставили, проверили, заветная строчка должна появится. Если есть строчки еще - не важно, главное, чтобы хотя бы одна эта была.

Итак, на основном компьютере стоит сервер, ожидающих наше подключение. Теперь идем к ноутбуку. Для начала, посмотрите, есть ли у вас команда sshfs. Просто наберите её в терминале. Если нет - нужно поставить.

Далее создадим папку, к которой мы собираемся примонтировать файловую систему рабочего компьютера. Например, в домашней директории создадим папку computer

mkdir computer

Теперь торжественный момент - монтируем удаленный компьютер. Набираем команду:

sshfs user@wikiadmin.net:/ /home/user/computer

где * user - пользователь на компьютере

  • wikiadmin.net - адрес основного компьютера, как мы это ранее выяснили

  • /home/user/computer - папка, которую мы ранее создали специально для того дела

Если вы сделали все правильно, то в /home/user/computer вы должны увидеть файловую систему удаленного, то есть основного, компьютера. Теперь вы можете открыть любой файловый менеджер (Наутилус или mc) и скопировать нужный вам файл. В нашем случае это можно сделать командой:

cp -v /home/user/computer/home/user/file.avi /home/user/

Опции монтирования

Их все можно увидеть, набрав sshfs -h. Укажем наиболее часто нужные. Если они вам необходимы, просто поставьте их в конце строки:

  • -p PORT -здесь вы указываете свой порт, если он не 22

  • -C -использовать ли сжатие

  • -o reconnect -пересоединится при разрыве

  • -o sshfs_sync -синхронная запись

  • -o cache=YESNO -использовать или не использовать кеш

  • -o follow_symlinks -follow symlinks on the server