В этой статье мы разберем как подключиться по SSH и самые основные команды, которые требуются чаще всего. По-умолчанию утилита дает доступ только к командной строке удаленного севера, но при желании можно запустить программы с графический интерфейсом прямо с сервера.
Для удаленного подключения к серверу есть много способов, но самый популярный и простой среди них это защищенный сетевой протокол SSH (Secure Shell) с помощью утилиты OpenSSH. Если вы хотите ознакомиться с полным списком команд утилиты, то это можно сделать здесь.
- Проверка наличия утилиты и установка OpenSSH
- Как подключиться по SSH с помощью пароля
- Как отключиться от севера и прервать SSH сессию
- Как подключиться по SSH с помощью ключа
- Генерация (создание) SSH-ключа
- Добавление ключа в список доверенных на сервере
- Подключение к серверу по ключу
- Как ограничить подключение по паролю
Проверка наличия утилиты и установка OpenSSH
Как правило, во многих дистрибутивах Linux утилита OpenSSH уже установлена по-умолчанию, но конечно же есть исключения. Для проверки наличия утилиты нужно ввести в терминал коротую команду:
ssh
И если вывод будет содержать возможные опции использования в примерно таком виде, значит OpenSSH установлен:
uxumax@debian9:~$ ssh usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command] uxumax@debian9:~$
Если же вывод содержит сообщение, что команда не найдена, то нужно установить openssh-client
.
uxumax@debian9:~$ ssh bash: ssh: command not found uxumax@debian9:~$
Если у вас Debian или Ubuntu, то для установки введите:
sudo apt install openssh-client
Если у вас CentOS или Fedora, то введите
sudo yum install openssh-client
Как подключиться по SSH с помощью пароля
Обычное подключение по SSH без дополнительных опций выглядит очень просто. Достаточно ввести логин, IP сервера и пароль. Допустим хостинг-провайдер нам выдал следующие данные после покупки сервера:
- IP-адрес сервера: 80.90.255.255
- Логин: root
- Пароль: xvFkWsIys
Исходя из этого мы формулируем команду в следующем виде ssh логин@IP-адрес:
ssh root@80.90.255.255
Если подключение осуществляется впервые, то утилита задаст вопрос, стоит ли добавлять в список доверенных хостов. Соглашаемся, набрав yes
и нажав Enter.
uxumax@debian9:~$ ssh root@80.90.255.255 The authenticity of host '80.90.255.255 (80.90.255.255)' can't be established. ECDSA key fingerprint is SHA256:8CbYK1TqAF3f1iSYLoUjSkurPQ0ve5I0GunB7lnPs+k. Are you sure you want to continue connecting (yes/no)? yes
Далее утилита запросит пароль пользователя
root@80.90.255.255's password:
Его можно ввести вручную или вставить из буфера обмена. При вводе пароля не будут появляться звездочки или какие-либо условные символы, это нормально. После ввода пароля вы попадаете в командную строку сервера, к которому подключались. Это значит, что теперь все введенные команды будут выполнятся именно на сервере.
root@80.90.255.255's password: Linux debian9 5.4.40-04224-g891a6cce2d44 #1 SMP PREEMPT Tue Jun 23 20:21:29 PDT 2020 x86_64 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. root@server:~#
Как отключиться от севера и прервать SSH сессию
Отключиться от сервера можно двумя простыми способами. Первый это ввести команду exit
:
root@server:~# exit logout Connection to 80.90.255.255 closed. uxumax@debian9:~$
Также можно нажать комбинацию клавиш Ctrl + D, что также прервет SSH сессию и вернет нас туда, откуда мы подключались.
Как подключиться по SSH с помощью ключа
Выше мы разобрали простое подключение по паролю, но гораздо безопаснее подключаться, используя ключ. В этом случае нужно вводить пароль от ключа, а не юзера сервера. Возможно даже вообще не вводить никаких паролей, а использовать только файл-ключ, что является очень удобным и относительно безопасным. Но обо всем по порядку.
Генерация (создание) SSH-ключа
Для начала нужно создать SSH-ключ на той машине, с которой будем подключаться к серверу, то есть ключ создается на стороне клиента, для этого не нужно заходить на сервер.
Чтобы создать ключ, нужно ввести команду ssh-keygen -f /папка/где/создать/ключ
. В примере мы будем использовать самую распространенную папку для ключей, которая находится в домашней папке пользователя: /home/имя_пользователя/.ssh/название_ключа
или ее укороченной версией ~/.ssh/название_ключа
:
ssh-keygen -f ~/.ssh/server-key
После ввода утилита попросит задать пароль для ключа. Здесь довольно важный момент. Можно вовсе не задавать пароль и просто нажать Enter. В таком случае подключение к серверу будет осуществляться только по ключу и без всякого ввода пароля.
Но в примере мы будем «параноиками» и зададим пароль на использование ключа. Придумаем именно отдельный пароль, не тот, что от пользователя сервера. Можно выбрать вариант проще, который возможно будет без труда запомнить и ввести вручную, например brandy-coin-13!
. Его мы будем в будущем вводить каждый раз, как потребуется использовать ключ. И так, задаем…
ssh-keygen -f ~/.ssh/server-key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase):
После этого нас попросят ввести пароль еще раз, повторяем его и если вы правильно ввели путь до папки для ключа, то должен получиться примерно такой вывод:
uxumax@debian9:~$ ssh-keygen -f ~/.ssh/server-key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/uxumax/.ssh/server-key. Your public key has been saved in /home/uxumax/.ssh/server-key.pub. The key fingerprint is: SHA256:RX489Wcrb1rt/CRlEs08D8T5Wn//qydYZOpOlIs+cGE uxumax@debian9 The key's randomart image is: +---[RSA 2048]----+ | . .o. | | o . oo= | | o + ooB| | E ..+ +B| | S .o+..+=| | . .o...+++| | o..oo .+=| | ...o .+*.| | .o. o+.O| +----[SHA256]-----+ uxumax@debian9:~$
В выводе строка с текстом Your identification has been saved in
говорит в какой именно папке сохранился ключ.
Добавление ключа в список доверенных на сервере
В предыдущем этапе мы только создали ключ. Пока он не подходит ни к одному серверу. Чтобы использовать его для входа на наш сервер, необходимо добавить его в список доверенных ключей на этом сервере. Звучит сложно, но на самом деле все обходится лишь одной командой, которая содержит путь до ключа, логин и IP-адрес сервера в своих опциях и имеет такой вид: ssh-copy-id -i /путь/до/ключа логин@IP-адрес
.
ssh-copy-id -i ~/.ssh/server-key root@80.90.255.255
После ввода команды потребуется разово ввести пароль от сервера, после чего ключ будет авторизован на сервере.
uxumax@debian9:~$ ssh-copy-id -i ~/.ssh/server-key root@80.90.255.255 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/uxumax/.ssh/server-key.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@80.90.255.255's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@80.90.255.255'" and check to make sure that only the key(s) you wanted were added. uxumax@debian9:~$
Подключение к серверу по ключу
Теперь можно подключаться к серверу, используя ключ. Для этого вводим команду, которая содержит логин, IP-адрес сервера и путь до ключа с опцией -i: ssh логин@IP-адрес -i /путь/до/ключа
ssh root@80.90.255.255 -i ~/.ssh/server-key
После ввода потребуется ввести пароль от ключа, который мы задавали в прошлом разделе. Если вы тогда просто нажали Enter, ничего не вводили, то вас сразу перекинет на север, без запроса пароля.
uxumax@debian9:~$ ssh root@80.90.255.255 -i ~/.ssh/server-key Enter passphrase for key '/home/uxumax/.ssh/server-key': Linux debian9 5.4.40-04224-g891a6cce2d44 #1 SMP PREEMPT Tue Jun 23 20:21:29 PDT 2020 x86_64 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. root@server:~#
Как ограничить подключение по паролю
Если ограничить подключение по паролю, то использование утилиты OpenSSH будет более безопасным, потому что даже если украдут ваш пароль, то он будет практически бесполезным, потому что зайти на сервер по SSH, используя его, будет уже невозможным.
Для выставления ограничений необходимо иметь права администратора, вы должны быть авторизованным под root или использовать sudo
перед каждой командой. В примерах будет использоваться вариант без sudo
, чтобы не было расхождений с предыдущими примерами.
Для начала зайдем на сервер по ключу:
ssh root@80.90.255.255 -i ~/.ssh/server-key
Используя консольный текстовый редактор nano, откроем под root файл настроек OpenSSH:
nano /etc/ssh/sshd_config
root@debian9:~# nano /etc/ssh/sshd_config
После чего мы увидим содержимое файла настроек. Нам нужно найти строчку:
... #PasswordAuthentication yes ...
Убрать #
в начале и заменить yes
на no
. То есть ее надо преобразить вот в такой вид:
... PasswordAuthentication no ...
Далее нажимаем сначала Ctrl + O , затем Enter, чтобы сохранить. И Ctrl + X, чтобы выйти.
Теперь, чтобы эти настройки вступили в силу, нужно перезапустить службу SSH. Для этого необходимо ввести следующую команду.
systemctl restart sshd
Теперь выйдем с сервера и вернемся туда, откуда подключались.
root@server:~# systemctl restart sshd root@server:~# exit logout Connection to 80.90.255.255 closed. uxumax@debian9:~$
И попробуем обратно подключиться к северу по паролю.
uxumax@penguin:~$ ssh root@80.90.255.255 Permission denied (publickey).
И видим, что сервер нас больше таким способом пускать не намерен. А теперь попробуем с помощью ключа.
uxumax@penguin:~$ ssh root@80.90.255.255 -i ~/.ssh/server-key Enter passphrase for key '/home/uxumax/.ssh/server-key': Linux debian9 5.4.40-04224-g891a6cce2d44 #1 SMP PREEMPT Tue Jun 23 20:21:29 PDT 2020 x86_64 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. root@debian9:~#
На этом настройка завершена, ключ не теряйте, а если потеряете, то пишите хостинг-провайдеру, чтобы он дал вам доступ по VNC, с помощью которого вы сможете включить вход по паролю обратно.
Чтобы сервер был в безопасности, советую настроить на нем фаервол и добавить порт SSH в список доверенных.