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
|
|
На внешне машинке wikiadmin.net появляется открытый порт 2210, который перенаправляет все запросы на недоступную извне машинку ws на 22 порт.
Проблема: долго запрашивается пароль
После введения логина несколько секунд ожидания, пока не возникнет запрос password. Добавьте в конец файла настроек (в Ubuntu /etc/ssh/sshd_config) следующие строки:
1 2 |
|
Если какой-либо из этих параметров есть, измените 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