SSH


ssh


SSH — рабочая лошадка при общении с сервером linux.

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

Чтобы соединиться с одного компьютера на другой посредством SSH, нужен ssh-server и ssh-client.

Я предполагаю, что вы находитесь под учетной записью root. Если это не так, то необходимо ввести префикс sudo перед каждой командой или ввести sudo -i перед продолжением.

Установка ssh-server


Итак, у вас есть сервер, с которым вы хотите соединяться. Установка достаточно проста:

apt-get install openssh-server


Установка проходит тихо, без лишних вопросов.

Первое, что я рекомендую делать, это сменить порт ssh с порта 22 по-умолчанию на что-нибудь другое. Это позволит избежать автоматических переборов паролей, а также добавит безопасности.

nano /etc/ssh/sshd_config


ssh порт 22

Поменяйте на любой незанятый порт, например 7777, и перегрузите сервер:

restart ssh


После этого уже можно соединяться со своим сервером по ssh.


Установка linux-клиента


Обычно ssh уже установлен на всех системах linux, но если это не так, установить ssh-клиент достаточно просто:

apt-get install openssh-client



Соединение


Соединиться с ssh-сервером можно одной командой:

ssh имя_сервера


Где имя_сервера это адрес сервера в виде dsn-адреса или ip, к примеру:

ssh 192.168.1.80


неверный ssh порт для соединения

Упс, по-умолчанию клиент пытается соединиться с портом 22, но мы его поменяли на 7777. Исправим это:

ssh -p 7777 192.168.1.80


добавить сервер в список

При первом соединении с сервером, клиент ssh создаст так называемый отпечаток (fingerprint) сервера и сравнит его с тем, который хранится в конфиге. Нужно добавить сервер в список известных серверов, т.к. соединяемся мы в первый раз. Набираем yes.

Если в будущем сервер будет переустановлен, то соединиться с ним не получится, т.к. отпечаток не будет совпадать. Это сделано в целях безопасности, чтобы нельзя было подменить сервер. Чтобы исправить это, измените соответствующую строку в файле ~/.ssh/known_hosts или просто удалите этот файл.


введите пароль

Далее вам нужно ввести пароль. Но что это за пароль? Какой-то отдельный пароль ssh? Нет. Это пароль пользователя на сервере, с которым вы соединяетесь. Но какого именно пользователя? Если ничего не указывать, то имя пользователя будет тем же, что и на сервере, с которого вы соединяетесь. В данном случае на скриншоте это пользователь root. Если нужно соединяться под именем другого пользователя то нужно указать его имя перед серверером: user@192.168.1.80.

Итак, вы ввели пароль и вуаля!

на удаленном сервере

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

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

Чтобы завершить соединение, введите команду exit.

соединение закрыто


Соединение windows — linux


Что делать тем, у кого нет клиента linux? Под Windows существует ряд программ, самая популярная из которых — putty. Есть также расширение этой програмы — kitty, которое добавляет в putty новый функционал.

putty

putty после соединения

Программа достаточно проста в эсплуатации.


Соединение без пароля


Для удобства и безопасности можно настроить безпарольное соединение для определенного пользователя. Для этого нужно для начала сгенерировать ключ на клиенте:

ssh-keygen -t dsa


Все поля можно оставить по-умолчанию.

генерация ssh ключа

Далее нужно скопировать сгенерированный ключ:

cat /root/.ssh/id_dsa.pub


копирование ssh ключа

Теперь нужно зайти на сервер и скопировать полученный ключ в файл:

nano ~/.ssh/authorized_keys


Теперь можно просто соединяться по ssh без пароля.

соединение без пароля

Теперь осталось сделать удобный alias на клиенте и соединяться с сервером одной простой командой.


Монтирование по ssh


Применение ssh не заканчивается исполнением команд на удаленном сервере. На основе этого протокола базируются другие программы. Например sshfs — программа монтирования удаленной файловой системы с помощью ssh.

Создадим в домашней директории root на сервере тестовый файл:

cd ~ && touch fileonserver


Теперь установим программу sshfs на клиенте:

apt-get install sshfs


Создадим тестовую директорию:

cd ~ && mkdir fromserver


А теперь примонтируем домашнюю директорию root с сервера в нашу тестовую директорию на клиенте:

sshfs -C -p 7777 root@192.168.1.80:/root/ ~/fromserver


И проверим результат:

ls -la ~/fromserver


директория с сервера примонтирована по ssh

Отмонтировать можно, как обычно, командой umount:

umount /root/fromserver



Копирование файлов по ssh


Что делать, если нужно скопировать файл с/на другой сервер? Можно, конечно, примонтировать удаленную файловую систему и воспользоваться обычной командой cp. Но что, если нужно сделать, к примеру, скрипт, который будет регулярно копировать файлы? В этом случае проще воспользоваться другой надстройкой над протоколом ssh — командой scp.

Из предыдущего пункта у нас остался файл fileonserver находящийся на сервере в домашней директории root (если его там нет — создайте). Скопировать его в домашнюю директорию клиента достаточно просто:

scp -P7777 root@192.168.1.80:/root/fileonserver ~


файл скопирован с сервера по ssh

Аргумент -P7777 указывает на порт 7777, который мы поменяли в самом начале.

Точно таким же образом можно отправить файл с клиента на сервер:

touch filefromclient


scp -P7777 ~/filefromclient root@192.168.1.80:/root/


файл отправлен на сервер по scp

Комментарии

Популярные сообщения из этого блога

Права на папки и файлы (unix/chmod)

Автоматическое монтирование дисков и разделов в Linux или что такое fstab? Проблема Debian

Как подключить сетевой диск Windows в Linux