Сервер

Ssh доступ к серверу: Как подключиться к серверу по SSH с помощью пароля или ключа

Содержание

Как подключиться к серверу по SSH с помощью пароля или ключа

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


Проверка службы SSH на сервере


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


Например, у меня VDS на Timeweb. Чтобы попасть в консоль, я авторизуюсь по логину и паролю, выданному хостером, выбираю свой сервер в списке VDS и перехожу на вкладку «Консоль». 



Чтобы пользоваться консолью, нужно авторизоваться. Логин и пароль для доступа к серверу хостер присылает в письме. Сначала нужно ввести логин и нажать на клавишу Enter. Появится строка Password. В ней необходимо ввести пароль и снова нажать на клавишу Enter.


Важно: в целях безопасности при вводе пароля на экране не отображаются никакие символы, даже привычные звездочки. 


После авторизации в консоли можно проверить, запущена ли служба SSH на сервере.


  1. Выполните команду systemctl status sshd.
  2. Обратите внимание на строчку Active. В ней должна быть выделенная зеленым запись active (running). Это состояние говорит о том, что служба запущена.


Если служба не активна, добавьте ее самостоятельно. Выполните команду sudo apt install openssh-server и подтвердите установку пакетов.


Кроме того, для подключения вам может понадобиться настройка брандмауэра. Чтобы межсетевой экран не блокировал входящие соединения, можно на время отключить его командой sudo ufw disable.


Использование пароля


Начнем с инструкции о том, как подключиться к удаленному серверу через SSH по логину и паролю. Это самый простой способ. Хостер предоставляет вам IP-адрес, логин и пароль. Этого достаточно для того, чтобы установить соединение с удаленным сервером.


Подключение на Windows


Моя основная система — Windows. Раньше для подключения к серверу через SSH я пользовался сторонней утилитой PuTTY, потому что в операционной системе не было встроенного компонента. В «десятке» он появился, так что теперь можно подключаться к SSH через командную строку (cmd).


Чтобы включить встроенный в систему OpenSSH:


  1. Откройте «Параметры» (Win + I) и перейдите в раздел «Приложения».
  2. Выберите опцию «Управление дополнительными компонентами».
  3. Нажмите «Добавить компонент».
  4. Выберите в списке OpenSSH Client и нажмите «Установить».
  5. После завершения установки перезагрузите систему.


Теперь разберемся, как подключиться к SSH через cmd. Запустите командную строку и выполните запрос вида ssh [email protected].


Значение root — логин для подключения, вы получили его в письме при создании сервера. 185.104.114.90 — IP-адрес сервера. Его можно посмотреть в панели управления сервером или в том же письме, которое прислал хостер. У команды может быть также дополнительный параметр -p, после которого прописывается номер порта. По умолчанию используется порт 22. Если у вас настроен другой порт, нужно явно его указать, — например, полный адрес может выглядеть так: ssh [email protected] -p 150.


После выполнения команды клиент SSH предложит добавить устройство в список известных. Введите в командной строке yes и нажмите на Enter. Затем укажите пароль для доступа к серверу. На этом подключение завершено — теперь все команды будут выполняться на удаленной машине, к которой вы подключились.


На версиях младше Windows 10 1809 нет встроенной поддержки протокола OpenSSH. В таком случае понадобится сторонняя утилита. Смотрим, как через PuTTY подключиться по SSH:


  1. Запустите PuTTY.
  2. На вкладке Session укажите Host Name (IP-адрес сервера), Port (по умолчанию 22, но если вы в конфигурации сервера указали другой порт, нужно задать его номер).
  3. Убедитесь, что тип соединения установлен SSH.
  4. Нажмите на кнопку Open, чтобы подключиться.


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


Подключение на Linux и macOS


Теперь посмотрим, как подключиться по SSH через терминал на Linux. Для этого не требуется установка дополнительных компонентов, все работает «из коробки».


  1. Запустите терминал. Обычно для этого используется сочетание клавиш Ctrl+Alt+T. Найти терминал также можно по пути «Главное меню» — «Приложения» — «Система».
  2. Выполните команду для подключения. Синтаксис такой же, как на Windows, — ssh [email protected]. Если порт не стандартный, то нужно явно его указать: например, ssh [email protected] -p 150. Вместо root вы указываете свое имя пользователя, а вместо 185.104.114.90 — IP-адрес своего сервера.
  3. Если хост и порт указаны верно, на следующем шаге появится запрос на ввод пароля. При первом подключении также будет предложение добавить новое устройство в список известных. Для этого введите yes и нажмите на клавишу Enter.

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


Если IP-адрес или порт указаны неверно, то на экране появится сообщение об ошибке — Connection Refused. Это может также говорить о том, что доступ запрещен брандмауэром на удаленном сервере (если вы его не отключили). Чтобы разрешить подключение через SSH:


  • на сервере с Ubuntu/Debian выполните команду $ sudo ufw allow 22/tcp;
  • на сервере CentOS/Fedora выполните команду $ firewall-cmd —permanent —zone=public —add-port=22/tcp.

Цифра 22 в синтаксисе — номер порта. Если вы используете другой порт, то укажите его явно.


Если вы знаете как подключиться через SSH на Linux, то справитесь с этой задачей и на macOS. В операционной системе Apple тоже есть встроенный терминал. Синтаксис команды для подключения не меняется: ssh [email protected], где root — ваш логин, а 185.104.114.90 — IP-адрес сервера, с которым вы устанавливаете соединение. 


Использование ключа


Ввод пароля для подключения через SSH — раздражающая процедура. У меня почти никогда не получалось ввести его правильно с первого раза. Поэтому я начал искать информацию о том, как подключиться к серверу через SSH без пароля. Простое и безопасное решение — использование ключа. Почему это безопаснее? Потому что пароль можно подобрать. Чтобы исключить такую вероятность, многие пользователи выбирают авторизацию с помощью ключа. 


Суть процедуры в формировании двух ключей: публичного и приватного. Первый копируется на сервер, а второй остается на компьютере пользователя и не передается по сети. В таком случае пароль при подключении не требуется. Когда вы подключаетесь к серверу через SSH, публичный ключ взаимодействует с приватным и открывает доступ к удаленному управлению.


Генерирование ключа и подключение на Windows


Для удобства используем программу PuTTy. Вместе с ней устанавливается утилита PuTTYgen — в ней можно сгенерировать публичный и приватный ключи.


  1. Запустите программу PuTTYgen.
  2. Нажмите на кнопку Gengerate.
  3. Водите курсором мышки по рабочему столу, чтобы сгенерировать случайные значения ключей.
  4. Нажмите на кнопку Save private key, чтобы сохранить на жестком диске приватный ключ. Место хранения может быть любым — его нужно указать в параметрах PuTTY. Сделаем это позже. 
  5. Скопируйте публичный ключ в буфер обмена (Ctrl + C) и закройте генератор ключей.


Теперь нужно перенести публичный ключ на сервер. Запустите программу PuTTY и подключитесь к серверу с помощью пароля. Затем последовательно введите следующие команды:



mkdir ~/.ssh

chmod 0700 ~/.ssh

touch ~/.ssh/authorized_keys

chmod 0644 ~/.ssh/authorized_keys


Эти команды создают на сервере папку и файл для хранения ключей, а также ограничивают к ним доступ — получить его может только владелец.


Следующий шаг — вставка публичного ключа из буфера обмена в файл authorized_keys. Для этого используется команда cat > .ssh/authorized_keys. После ввода команды щелкните по окну терминала правой кнопкой, чтобы вставить скопированный ранее публичный ключ. Для завершения ввода нажмите на сочетание клавиш Ctrl+D.


Вернитесь в настройки PuTTY. Перейдите в раздел Connection — SSH — Auth. Нажмите на кнопку Browse и укажите путь к приватному ключу, который вы ранее сохранили на жестком диске.



Теперь для подключения к серверу через SSH пароль не нужен — достаточно указать логин и IP-адрес сервера.


Генерирование ключа и подключение на Linux и macOS


Теперь посмотрим, как подключиться через SSH ключи на Linux и macOS. 


  1. Запустите терминал на локальном компьютере.
  2. Выполните команду ssh-keygen, чтобы сгенерировать ключи.
  3. Нажмите на Enter, чтобы сохранить ключи.

Генератор предложит также задать кодовую фразу для ключа. Это дополнительная мера безопасности: если кто-то получит доступ к вашей локальной машине, то все равно не сможет подключиться к серверу через SSH. Минус один — вам тоже придется постоянно вводить ключевую фразу. Можно отказаться от этой меры защиты, просто нажав на клавишу Enter. 


На этом процедура создания ключей завершена. Файлы d_rsa (приватный ключ) и id_rsa.pub (публичный ключ) хранятся в папке ~/.ssh/.  Осталось скопировать открытую часть ключа на сервер.


  1. Вернитесь в терминал.
  2. Выполните команду ssh-copy-id [email protected], где root — логин для подключения к серверу по SSH, а 185.104.114.90 — IP-адрес или хост сервера.

После выполнения этой команды публичный ключ будет скопирован на сервер. Теперь вы можете подключаться к удаленной машине с помощью логина и IP-адреса — например, ssh [email protected]. Ключи будут сопоставляться автоматически.


Отключение запроса пароля


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


  1. Подключитесь к удаленному серверу.
  2. Выполните команду sudo nano /etc/ssh/sshd_config. Файл sshd_config откроется во встроенном текстовом редакторе. 
  3. Найдите строку PasswordAuthentication yes и измените ее на PasswordAuthentication no.
  4. Сохраните изменения и перезапустите службу SSH командой sudo service ssh restart.

Авторизация по паролю отключена. Теперь подключиться к серверу можно только с помощью пары ключей.

настройка доступа к серверу, команды и подключение без паролей

Что такое SSH

SSH (Secure Shell) — это сетевой протокол, предназначенный для удалённого управления сервером и передачи данных по зашифрованным TCP соединениям. Большинство хостингов, даже виртуальных, сегодня предоставляет доступ как по FTP, так и по SSH. На мой взгляд, это здорово, SSH намного удобнее и безопаснее в использовании.

Настройка SSH

Настройка будет происходить под выделенный сервер, VDS, VPS на Debian, Ubuntu. Конфигурационный файл располагается тут: /etc/ssh/sshd_config.
Если у вас обычный хостинг, всё и так должно быть настроено как надо, переходите к разделу авторизации по ключам.

По умолчанию, демон SSHD (именно в него мы вносим изменения) не нуждается в каких-либо настройках и работает нормально. Мы внесём лишь пару небольших изменений с целью ограничить доступ нежелательных лиц к серверу.

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

Как ограничить доступ по SSH

Все изменения вносятся в /etc/ssh/sshd_config
Чтобы изменения вступили в силу, необходимо перезагрузить SSH

Сменить порт

Port 9724

Теперь при авторизации вам нужно вместо стандартного 22 порта указывать 9724.
Способ очень простой и действенный против большинства простых ботов хакеров, которые стучатся в стандартные порты. Тут главное не создать конфликт с другими службами и подобрать заведомо неиспользуемое число.

Запретить связь по старому протоколу

Здесь мы определяем, что связь возможна только по протоколу v2

Protocol 2

Запретить авторизацию под root

PermitRootLogin no

По умолчанию no. Если yes, можно авторизовываться под рутом. Под root работать небезопасно, лучше создать своего пользователя и работать под ним.

Если вы авторизованы не под root, перед всеми консольными командами нужно добавлять sudo — расшифровывается как Substitute User and DOподмени юзера и делай (под ним). Например, позволяет исполнять команды от имени суперпользователя root.

Работа по SSH на виртуальном хостинге — как подключиться, создать архив zip, создать, удалить папку или изменить права

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

SSH – это протокол передачи данных, позволяющий производить безопасное и защищённое управление операционной системой и данными.

Подключение по SSH возможно на всех тарифных планах виртуального хостинга, кроме тарифа «Host-Lite». Если у вас заказан тарифный план «Host-Lite», повысьте тариф, и у вас появится возможность соединения по SSH Как повысить тарифный план хостинга.

Как подключиться к Windows-серверу по SSH

Если у вас заказан Windows хостинг или Windows VPS, то подключение по SSH невозможно. Управление услугой хостинга происходит через панель управления, а к Windows VPS можно подключиться с помощью RDP.

В зависимости от операционной системы, установленной на вашем домашнем компьютере (не путайте с ОС хостинга), для SSH подключения к серверу Linux-хостинга возможны следующие варианты:

  • Если на вашем компьютере установлена ОС Windows, то подключение происходит через Putty.
  • Для ОС Linux на компьютере доступно подключение к SSH через терминал.

На вашем компьютере установлена ОС Windows

Для подключения по SSH в ОС Windows мы рекомендуем использовать SSH-клиент PuTTy.
Скачать клиент можно на официальном сайте (англоязычная версия).

Подключение по SSH Windows:

  1. 1.

    Запустите программу PuTTY;

  2. 2.

    На странице с основными настройками сеанса PuTTY, в поле «Host Name» введите IP-адрес сервера.

    IP-адрес сервера указан в информационном письме, отправленном на контактный e-mail после заказа хостинга. Также данная информация продублирована в Личном кабинете. Авторизуйтесь на сайте REG.RU и кликните по нужной услуге хостинга. IP-сервера указан на вкладке «Доступы»:

    Если вы уже делегировали домен на сервер, вместо IP-адреса можно указать домен. Также в качестве хоста можно использовать технологический домен.

  3. 3.

    При первом подключении к серверу появится окно «Предупреждение безопасности PuTTY». Нажмите Да:

  4. 4.

    В открывшемся окне PuTTY введите ваш логин услуги хостинга вида «u1234567». Нажмите Enter. Затем введите ваш пароль от услуги хостинга и нажмите Enter. В целях безопасности вводимый пароль не отображается на экране в виде символов. Набирая пароль, вы не увидите на экране ни самого пароля, ни звёздочек.

    Чтобы вставить скопированный логин и пароль в окно PuTTy, нажмите Shift + Insert.

    Логин и пароль услуги хостинга указаны в информационном письме, отправленном на контактный e-mail после заказа хостинга. Также данная информация продублирована в Личном кабинете. Авторизуйтесь на сайте REG.RU и кликните по нужной услуге хостинга. Логин и пароль указаны на вкладке «Доступы»:

    Важно: если вы несколько раз подряд ввели неправильный пароль и сервер заблокировал соединение по SSH (если PuTTY не подключается по SSH), обратитесь в техническую поддержку или подождите 2 часа. По истечении этого времени блокировка снимается автоматически.

Как только вы подключитесь по SSH, вы окажетесь в домашнем каталоге вашего хостинга. Консольные команды Linux представлены по ссылке. Обратите внимание: многие из этих команд выполнить на виртуальном хостинге не получится (установка и удаление пакетов, монтирование файловых систем и др.), так как у вас нет root-доступа.

На вашем компьютере установлена Linux-подобная ОС (как подключиться по SSH Ubuntu, Kubuntu, Fedora, …)

Для ОС Linux доступ по SSH осуществляется через терминал, который уже предустановлен в самой системе.

  1. 1.

    Запустите терминал:

    • в Unity (Ubuntu): «Главное меню» — в поисковой строке введите слово «Терминал». Либо просто нажмите комбинацию клавиш: Ctrl+Alt+T;
    • в Xfce (Xubuntu): «Главное меню» — «Приложения» — «Система» — «Терминал»;
    • в KDE (Kubuntu): «Главное меню» — «Приложения» — «Система» — «Терминал».
  2. 2.

    Введите команду:

    ssh [email protected]

    Где u1234567 — логин учётной записи хостинга (Как узнать логин и пароль услуги хостинга?; 123.123.123.123 — IP-адрес сервера (Как узнать IP-адрес сервера?).

  3. 3.

    Нажмите «Enter», введите пароль услуги хостинга.

Готово, вы успешно завершили ssh-подключение через терминал.

На Hosting Linux подключение по SSH возможно только под основным логином хостинга (вида u1234567). Создать дополнительного пользователя SSH нельзя.

Чтобы отключить SSH-доступ на хостинге, напишите заявку в службу поддержки. В заявке сообщите ваш логин хостинга (вида u1234567), для которого необходимо отключить доступ по SSH.

Создание архива tar.gz

Подключитесь к серверу по SSH и выполните команду:

tar -czvf name.tar.gz path/folder-name/
  • Данная команда создаст архив папки path/folder-name/. Название архива — name.tar.gz.
  • Все файлы будут сжаты при помощи gzip.
  • В процессе создания архива будет показан процесс архивации. Если данная информация вам не нужна, уберите ключ «v» из команды.

Разархивация происходит при помощи команды:

Создание архива zip

Подключитесь к серверу по SSH и выполните команду:

zip -r имя-архива.zip /путь-к-папке

# пример
zip -r log.zip /var/log

В результате команды из примера будет создан архив папки /var/log со всем её содержимым. Имя созданного архива: log.zip.
Разархивировать можно будет при помощи команды:

unzip имя-архива.zip

Как создать или удалить папку по SSH

Чтобы создать папку, подключитесь к серверу по SSH и используйте команду:

Где new_folder_name — имя создаваемой папки.

После подключения по SSH удалить папку можно с помощью команды:

Где folder_name — имя удаляемой папки. Ключ —r делает рекурсивное удаление, то есть удаляет папку со всеми вложенными в неё папками и файлами.

Чтобы настроить права доступа к отдельному файлу:

  1. 1.
    Подключитесь по SSH.
  2. 2.

    Выполните команду:

    chmod 755 /var/www/file_name

    Где /var/www/file_name — полный путь до вашего файла (/полный-путь-до-корневой-папки-сайта/сам-файл).

Готово! Права на файлы/папки будут изменены.

Чтобы рекурсивно настроить доступ ко всем папкам и файлам на вашем сайте:

  1. 1.
    Подключитесь по SSH.
  2. 2.

    Выполните команды:

    find /dir_name -type d -exec chmod 755 {} \
    find /dir_name -type f -exec chmod 644 {} \

    Где dir_name — полный путь до корневой папки сайта (Как узнать корневую папку сайта?).

    Первая команда изменит права для всех директорий внутри указанной на 755. Вторая — для файлов внутри указанной директории на 644.

Готово! Права на файлы/папки будут изменены.

В качестве альтернативного способа вы можете использовать команду, чтобы сначала задать права всем файлам:

А затем назначить права 755 только на папки:

find /dir_name -type d -exec chmod 755 {} \

Где dir_name — полный путь до корневой папки сайта (Как узнать корневую папку сайта?).

Как запустить Midnight Commander

Midnight Commander — это файловый менеджер.

Чтобы его запустить:

Как использовать кириллицу в терминале Linux

Если у вас ОС Linux, то при подключении к серверу по SSH вы можете использовать в терминале не только латиницу, но и кириллицу.

Если вы хотите использовать кириллицу в течение одного сеанса SSH, то после подключения введите в терминале команду:

export LC_ALL="ru_RU.UTF8"

Если вы хотите использовать кириллицу постоянно, то нужно внести изменения файл в .bashrc. Для этого после подключения по SSH:

  1. 1.

    Откройте файл .bashrc с помощью текстового редактора vim или nano:

    nano .bashrc #с помощью редактора nano
    vim .bashrc #с помощью редактора vim
  2. 2.

    Добавьте в него строку:

    export LC_ALL="ru_RU.UTF8"

Готово, теперь при любом подключении к SSH можно будет автоматически использовать кириллицу.

Помогла ли вам статья?

205
раз уже
помогла

Как подключиться по SSH к виртуальному серверу? 🚩

Содержание:

SSH – сетевой протокол, позволяющий создать удалённое подключение к виртуальным серверам с KVM-виртуализацией на базе OC Linux. Для удалённой работы с VPS на базе OC Windows используют протокол RDP, подключение к которому описано здесь.

Получение доступов к серверу

Для подключения к виртуальному серверу по сетевому протоколу SSH понадобятся данные учётной записи вашего сервера. Получить их можно в биллинг-панели BILLmanager, пройдя «Товары/Услуги» → «Виртуальный сервер» → выбор сервера → «Инструкция».

Чтобы создать подключение по SSH, нужно будет скопировать из полученной памятки IP-адрес и пароль от виртуального сервера.

Как подключиться к VPS c OC Windows

Подключиться к VPS по SSH с ОС Windows удобнее всего с использованием бесплатной программы PuTTY.

  1. Скачиваем SSH-клиент с официального сайта, устанавливаем и запускаем приложение (файл putty.exe).
  2. Вводим IP-адрес VPS в графу «Имя хоста». Проверяем графу «Тип соединения» – должен быть выбран пункт «SSH». Нажимаем «Соединиться».
  3. Вводим логин (→ «Enter») и пароль (→ «Enter») виртуального сервера.
  4. Готово. Мы подключились к VPS по SSH.

Как подключиться к VPS c OC Linux

Для подключения используем SSH-клиент Terminal, который встроен в ОС на основе Linux. При вводе команд нужно помнить, что в Linux-образных ОС они вводятся только в нижнем регистре (с маленькой буквы).

  1. Открываем приложение. Вводим команду вида «ssh логин@IP-адрес» с подставлением данных для доступа к VPS серверу. Нажимаем «Enter».
  2. Если пользователь использует SSH-соединение первый раз, ему потребуется ввести команду подтверждения («Yes»).
  3. Вводим пароль от виртуального сервера.
  4. Мы подключились к VPS по SSH.

Как подключиться к VPS c macOS и iOS

Для подключения к серверу по SSH с устройств на операционной системе macOS, также как и в предыдущем случае, используем встроенный клиент Terminal.

  1. Открываем приложение. Вводим команду с данными сервера «ssh логин@IP-адрес». Нажимаем «Enter».
  2. При первом входе подтверждаем свои действия соответствующей командой «Yes».
  3. Вводим пароль от виртуального сервера.
  4. Подключение к виртуальному серверу по протоколу SSH завершено.

С мобильных устройств на iOS процедура подключения к серверу по SSH проходит аналогичным способом. Для этого существует много удобных приложений, таких как бесплатные SSH-клиенты iTerminal и Termius. В приложении нужно выбрать пункт «SSH», указать IP-адрес («Host name / IP address»), логин («User name»), пароль («Password») и нажать «Соеденить» («Connect»).

Как подключиться к VPS c Android

Для подключения нужно скачать и установить один из SSH-клиентов для устройств на Android. В качестве удобного варианта рассмотрим популярное бесплатное приложение ConnectBot.

  1. Открываем приложение и нажимаем на плюсик в правом нижнем углу.
  2. В открывшемся меню нажимаем галочку всплывающего меню в пункте «имя пользователя@имя хоста» (в конце строки). В открывшемся меню заполняем данные сервера – «Имя пользователя» (логин) и «Узел» (IP-адрес). После этого строка «имя пользователя@имя хоста» заполнится автоматически и стане доступным кнопка «Добавить хост». Нажимаем на плюсик рядом с «Добавить хост».
  3. Переходим в меню «Серверы» и нажимаем на значок с именем сервера.
  4. Для первого SSH соединения потребуется подтверждение. В меню выбора «Хотите продолжить попытки соединения» нажимаем «Да».
  5. Заносим данные сервера в графу «Пароль» в нижней части экрана и нажимаем «Enter».
  6. Соединение с виртуальным сервером по SSH установлено.

Удобная и безопасная работа с серверами по ssh / Хабр

Так как по работе приходится много удалённо работать с unix серверами, то пришлось разобраться как это делать комфортно и безопасно и со временем возникло желание поделиться. Данная заметка не претендует на новизну информации, но мне показалось что нигде нет цельного руководства, нечто похожее есть только на английском.
Описание тестировалось под Debian GNU/Linux с KDE, но должно подходить под основную массу unix систем/дистрибутивов/оконных менеджеров и графических сред.

Терминал

я использую yakuake — очень удобно быстро вызывать консоль по клавише (по умолчанию F12)

Авторизация

Важный принцип систем безопасности заключается в том, что они должны быть удобными, иначе ими не будут пользоваться, касательно ssh это означает, что для безопасности нужно пользоваться авторизацией по ключам с парольной фразой, а для удобства нужно хранить парольную фразу от ключа в памяти компьютера до перезагрузки (т.е. вводить её нужно один раз при запуске машины, и до следующей перезагрузки ничего вводить не придётся).

Исходное положение:

1. Подразумевается что удалённый ssh сервер уже настроен для авторизации по ключу (это обычно так и есть)

2. Подразумевается что ssh-agent запускается автоматом (обычно это так и есть, проверить можно командой ps aux | grep 'ssh')

3. Установлен пакет ssh-askpass (поставить можно командой sudo aptitude install ssh-askpass)

Алгоритм

1. генерим ключ
ssh-keygen -b 4096 -t rsa

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

доступов

2. Копируем ключ на сервер
ssh-copy-id -i ~/.ssh/id_rsa.pub server.tld

если юзеры на локальной машине и удалённом сервер разные, то необходимо указать и имя юзера — ssh-copy-id [email protected]

3. Пользователям KDE для добавления ключей при логине в папку ~/.kde/Autostart добавляем скрипт add-keys.sh со следующим содержимым
#!/bin/bash

/usr/bin/ssh-add

Для пользователей GNOME есть описание.

Также для хранения ключей в памяти можно использовать keychain.

Завершаем сессию, входим и видим окно запроса парольной фразы, вводим её и пробуем зайти на сервер
ssh [email protected]

или выполнить команду
ssh [email protected] uname -a

Работа при неустойчивой связи

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

Для решения этой проблемы существует программа screen, она остаётся запущенной даже при обрыве связи и сохраняет открытыми/запущенными все приложения которые запускались в ней.

Алгоритм

1. запускаем screen, с виду может ничего не поменяться, но echo $TERM скажет что мы в скрине

2. с помощью клавиатурных команд
Ctrl+A затем «c» – создать окно screen

Ctrl+A затем «K» – закрыть окно screen

Ctrl+A затем «p» – переключиться к предыдущему окну screen

Ctrl+A затем «n» – переключиться к следующему окну screen

Ctrl+A затем «"» – выводит меню со списком окон

Ctrl+A затем «number» – переходит на окно с нужным номером, нумерация с 0


создаём нужно число окон, запускаем в них нужные программы, логично выработать единую систему назначения окон на всех сервера (например в окне номер 1 иметь подключение к базе, в окне номер 2 логи и т.д.).

3. По каким-то причинам обрывается коннект

4. Заходим на сервер, выполняем:
screen -d -RR

и мы снова в том же скрине со всем приложениями в том же состоянии.

Дополнительно про screen читаем:
man screen

и много статей в сети, например эту.

Обмен файлами

Для копирования файлов на/с/между машинами существует утилита scp, утилита простая всё должно быть понятно по примеру копирования с текущей машины на удалённый сервер
scp backdoor.sh [email protected]:/home/user/

с удалённого сервера на текущую (в текущую папку)
scp [email protected]:/etc/passwd .

Для страдающих на MS Windows ®

есть PuTTY:

  • PuTTY (ssh клиент)
  • PSCP (SCP клиент)
  • Pageant (аналог ssh-agent)
  • PuTTYgen (генератор ключей)

аналог GNU screen видимо тут.

Надеюсь кому-то будет полезным.

Как правильно общаться с удаленным сервером через SSH

SSH
далек от совершенства, но он был разработан с учетом безопасности, и на
протяжении многих лет было написано огромное количество инструментов для
облегчения его использования. Кроме того, большинство популярного софта
комплектуются SSH.
Он поддерживается практически во всех архитектурах и дистрибутивах, начиная от Raspberry Pi и заканчивая массивными суперкомпьютерными
кластерами.

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

Следующий
уровень секьюрности после ключей – SSH-сертификаты, которые поддерживаются с OpenSSH
5.4, выпущенного ещё в 2010 году.

С помощью
SSH-сертификатов вы создаете центр сертификации (CA), а затем используете его
для выдачи и криптографической подписи, которая аутентифицирует пользователей.
Вы можете создать пару ключей, например, с помощью команды ssh-keygen:

        $ ssh-keygen -t rsa -b 4096 -f host_ca -C host_ca
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in host_ca.
Your public key has been saved in host_ca.pub.
The key fingerprint is:
SHA256:tltbnMalWg+skhm+VlGLd2xHiVPozyuOPl34WypdEO0 host_ca
The key's randomart image is:
+---[RSA 4096]----+
|              +o.|
|            .+..o|
|           o.o.+ |
|          o o.= E|
|        S  o o=o |
|       ....+ = +.|
|       ..=. %.o.o|
|        *o Oo=.+.|
|       .oo=ooo+..|
+----[SHA256]-----+

$ ls -l
total 8
-rw-------. 1 gus gus 3381 Mar 19 14:30 host_ca
-rw-r--r--. 1 gus gus  737 Mar 19 14:30 host_ca.pub
    

Файл
host_ca является закрытым ключом центра сертификации хоста и должен храниться в
защищенном месте. Не выдавайте его никому, не копируйте куда-либо и убедитесь,
что как можно меньше людей имеют к нему доступ. В идеале он «живет» на
машине, которая не допускает прямого доступа, и все сертификаты выдаются автоматически.

Рекомендуется использовать два отдельных CA – один для
подписания сертификатов хостов, другой для пользователей. Одни и те же процессы не будут добавлять и хосты, и юзеров. А если закрытый
ключ скомпрометируют, нужно будет лишь пересоздать сертификаты для хостов
или пользователей, а не оба сразу.

Вот так создается
user_ca:

        $ ssh-keygen -t rsa -b 4096 -f user_ca -C user_ca
    

Файл
user_ca – закрытый ключ пользователя, который должен быть защищен, как и закрытый
ключ хоста.

Выдача
сертификатов хостам

Создадим новый ключ и подпишем с помощью центра сертификации.

ssh_host_rsa_key-cert.pub содержит подписанный сертификат хоста.

        $ ssh-keygen -f ssh_host_rsa_key -N '' -b 4096 -t rsa

$ ls -l
-rw------- 1 palpatine palpatine 3247 Mar 17 14:49 ssh_host_rsa_key
-rw-r--r-- 1 palpatine palpatine  764 Mar 17 14:49 ssh_host_rsa_key.pub

$ ssh-keygen -s host_ca -I host.example.com -h -n host.example.com -V +52w ssh_host_rsa_key.pub
Enter passphrase: # the passphrase used for the host CA
Signed host key ssh_host_rsa_key-cert.pub: id "host.example.com" serial 0 for host.example.com valid from 2020-03-16T15:00:00 to 2021-03-15T15:01:37

$ ls -l
-rw------- 1 palpatine palpatine 3247 Mar 17 14:49 ssh_host_rsa_key
-rw-r--r-- 1 palpatine palpatine 2369 Mar 17 14:50 ssh_host_rsa_key-cert.pub
-rw-r--r-- 1 palpatine palpatine  764 Mar 17 14:49 ssh_host_rsa_key.pub
    

Вот описание
используемых флагов:

  • -s host_ca: указывает имя файла закрытого CA-ключа, используемого для подписи.
  • -I host.example.com: буквенно-цифровая строка, идентифицирующая сервер. При необходимости значение можно использовать для отзыва сертификата.
  • -h: указывает, что сертификат выдается хосту, а не юзеру.
  • -n host.example.com: указывает разделенный запятыми список участников, для проверки подлинности которых будет действителен сертификат.
  • -V +52w: срок действия сертификата. В данном случае 52 недели (один год). По умолчанию сертификаты действительны вечно. Указание периода истечения срока действия сертификатов хоста настоятельно рекомендуется для ротации и замены сертификатов.

Настройка
SSH для использования сертификатов

Нужно указать серверу, чтобы он использовал новый сертификат. Скопируйте три сгенерированных файла на сервер в каталог /etc/ssh,
установите разрешения и добавьте в файл /etc/ssh/sshd_config следующую строку:

        HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
    

Перезагрузите sshd с помощью systemctl restart sshd. Теперь сервер
настроен на выдачу сертификата. Чтобы локальный ssh-клиент мог автоматически
доверять хосту на основе удостоверения сертификата, нужно добавить открытый ключ
CA в known_hosts. Вы можете
сделать это, добавив в начало файла host_ca.pub следующее: @cert-authority
*.example.com
, а затем и в ~/.ssh/known_hosts:

        @cert-authority *.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDwiOso0Q4W+KKQ4OrZZ1o1X7g3yWcmAJtySILZSwo1GXBKgurV4jmmBN5RsHetl98QiJq64e8oKX1vGR251afalWu0w/iW9jL0isZrPrmDg/p6Cb6yKnreFEaDFocDhoiIcbUiImIWcp9PJXFOK1Lu8afdeKWJA2f6cC4lnAEq4sA/Phg4xfKMQZUFG5sQ/Gj1StjIXi2RYCQBHFDzzNm0Q5uB4hUsAYNqbnaiTI/pRtuknsgl97xK9P+rQiNfBfPQhsGeyJzT6Tup/KKlxarjkMOlFX2MUMaAj/cDrBSzvSrfOwzkqyzYGHzQhST/lWQZr4OddRszGPO4W5bRQzddUG8iC7M6U4llUxrb/H5QOkVyvnx4Dw76MA97tiZItSGzRPblU4S6HMmCVpZTwva4LLmMEEIk1lW5HcbB6AWAc0dFE0KBuusgJp9MlFkt7mZkSqnim8wdQApal+E3p13d0QZSh4b6eB3cbBcbpNmYqnmBFrNSKkEpQ8OwBnFvjjdYB7AXqQqrcqHUqfwkX8B27chDn2dwyWb3AdPMg1+j3wtVrwVqO9caeeQ1310CNHIFhIRTqnp2ECFGCCy+EDSFNZM+JStQoNO5rMOvZmecbp35XH/UJ5IHOkh9wE5TBYIeFRUYoc2jHNAuP2FM4LbEagGtP8L5gSCTXNRM1EX2gQ== host_ca
    

Значение
*.example.com указывает на то, что этому сертификату следует доверять для
идентификации любого хоста, к которому вы подключаетесь и который имеет домен
*.example.com. Это разделенный запятыми список имен хостов для сертификата: host1,
host2, host3 или 1.2.3.4, 1.2.3.5 в зависимости от обстоятельств.

Как
только закончите настройку, удалите все старые записи для host.example.com в ~/.ssh/known_hosts
и запустите подключение. Правильность создания сертификата проверяется так:

        $ ssh -vv host.example.com 2>&1 | grep "Server host certificate"
debug1: Server host certificate: [email protected] SHA256:dWi6L8k3Jvf7NAtyzd9LmFuEkygWR69tZC1NaZJ3iF4, serial 0 ID "host.example.com" CA ssh-rsa SHA256:8gVhYAAW9r2BWBwh7uXsx2yHSCjY5OPo/X3erqQi6jg valid from 2020-03-17T11:49:00 to 2021-03-16T11:50:21
debug2: Server host certificate hostname: host.example.com
    

На этом
этапе вы можете продолжить выдачу сертификатов всех хостов, используя центр сертификации. Польза от этого следующая: вам больше не нужно полагаться
на небезопасную модель Trust On First Use (TOFU) для новых хостов, и если вы
когда-нибудь повторно развернете сервер и, следовательно, измените ключ хоста, новый хост автоматически представит подписанный сертификат без ужасного предупреждения: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Выдача
сертификатов пользователям (для аутентификации пользователей на хостах)

В этом
примере мы создадим новый ключ пользователя и подпишем с помощью центра сертификации.

        $ ssh-keygen -f user-key -b 4096 -t rsa

$ ls -l
-rw-r--r--. 1 tatooine tatooine 737 Mar 19 16:33 user-key.pub
-rw-------. 1 tatooine tatooine 3369 Mar 19 16:33 user-key

$ ssh-keygen -s user_ca -I [email protected] -n ec2-user,gus -V +1d user-key.pub
Enter passphrase: # the passphrase used for the user CA
Signed user key user-key-cert.pub: id "[email protected]" serial 0 for ec2-user,gus valid from 2020-03-19T16:33:00 to 2020-03-20T16:34:54

$ ls -l
-rw-------. 1 tatooine tatooine 3369 Mar 19 16:33 user-key
-rw-r--r--. 1 tatooine tatooine 2534 Mar 19 16:34 user-key-cert.pub
-rw-r--r--. 1 tatooine tatooine 737 Mar 19 16:33 user-key.pub
    

user-key-cert.pub
содержит подписанный сертификат пользователя. Для входа в систему понадобится как этот, так и приватный ключ. Вот описание
используемых флагов:

  • -s user_ca: указывает приватный ключ CA, используемый для подписи.
  • -I [email protected]: буквенно-цифровая строка, которая будет видна в логе SSH. Для точной идентификации пользователя рекомендуем использовать адрес электронной почты или логин.
  • -n palpatine, tatooine: указывает разделенный запятыми список участников, для проверки подлинности которых будет действителен сертификат. В примере мы предоставляем сертификат доступа как для palpatine, так и для tatooine.
  • -V +1d: указывает срок действия сертификата, в данном случае +1d означает 1 день.

Если нужно увидеть параметры подписи сертификата,
используйте ssh-keygen -L:

        $ ssh-keygen -L -f user-key-cert.pub
user-key-cert.pub:
        Type: [email protected] user certificate
        Public key: RSA-CERT SHA256:egWNu5cUZaqwm76zoyTtktac2jxKktj30Oi/ydrOqZ8
        Signing CA: RSA SHA256:tltbnMalWg+skhm+VlGLd2xHiVPozyuOPl34WypdEO0 (using ssh-rsa)
        Key ID: "[email protected]"
        Serial: 0
        Valid: from 2020-03-19T16:33:00 to 2020-03-20T16:34:54
        Principals: 
                tatooine
                palpatine
        Critical Options: (none)
        Extensions: 
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc
    

Настройка
SSH для проверки подлинности

После
того как сертификат подписан, нужно сообщить серверу, что можно доверять пользователским сертификатам. Копируем user_ca.pub
в директорию /etc/ssh, поправляем права и добавляем в конфиг /etc/ssh/sshd_config строку:

        TrustedUserCAKeys /etc/ssh/user_ca.pub
    

Как раньше, перезагружаем sshd с помощью systemctl restart sshd. Теперь
сервер настроен на пропуск всех, кто представляет сертификат, выданный центром сертификации при подключении. Если сертификат хранится в том же
каталоге, что и ваш приватый ключ (указанный с флагом -i, например ssh -i
/home/tatooine/user-key
palpatine @proglib.io),
он будет автоматически использоваться при подключении к серверам.

Проcмотр логов

Если вы
посмотрите в журнал sshd сервера, запустив journalctl -u sshd, то увидите имя используемого для аутентификации сертификата, а также данные центра сертификации:

        sshd[14543]: Accepted publickey for tatooine from 1.2.3.4 port 53734 ssh3: RSA-CERT ID [email protected] (serial 0) CA RSA SHA256:tltbnMalWg+skhm+VlGLd2xHiVPozyuOPl34WypdEO0
    

Если
пользователь попытается войти в систему под логином, у которого нет доступа, в логе вы увидите такую ошибку:

        sshd[14612]: error: key_cert_check_authority: invalid certificate
sshd[14612]: error: Certificate invalid: name is not a listed principal
    

Если срок
действия сертификата истек, вы увидите следующую ошибку:

        sshd[14240]: error: key_cert_check_authority: invalid certificate
sshd[14240]: error: Certificate invalid: expired
    

В
качестве домашнего задания напишите скрипт, который будет использовать центр сертификации для выдачи сертификатов, действительных в течение следующих
двух часов. Каждое использование этого скрипта должно журналировать того, кто
запросил сертификат и его почту, а потом встраивать этот email в сертификат. Это поможет в
мониторинге.

Взгляните
на man ssh-keygen для новых идей.

Еще один
способ повысить безопасность SSH – принудительно использовать bastion-хост – ssh-шлюз, служащий единственной точкой входа
в инфраструктуру. Уменьшение вероятности любой потенциальной поверхности атаки
за счет использования файерволов позволяет лучше следить за тем, кто к чему
обращается.

Переход к
использованию такого метода не должен быть трудной задачей, особенно если вы уже
применяете сертификаты. Все настройки совершаются через локальный конфиг:
~/.ssh/config.

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

        Host *.example.com
    ProxyJump bastion.example.com
    IdentityFile ~/user-key

Host bastion.example.com
    ProxyJump none
    IdentityFile ~/user-key
    

Вместе с bastion для своих подключений вы можете использовать
iptables (или другой *nix-вый файервол на ваш выбор) на серверах за bastion-ом,
для блокировки входящих SSH-соединений. Например, вот так:

        $ iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ iptables -A INPUT -p tcp --dport 22 -s <public IP of the bastion> -j ACCEPT
$ iptables -A INPUT -p tcp --dport 22 -j DROP
    

Хорошая идея оставить второй SSH-сеанс активным – если что-то пойдет не так,
вы должны иметь возможность исправить ситуацию через установленное соединение.

Не так то
и просто преодолеть два различных метода проверки пользователя, особенно когда
не знаешь паролей. Первый уровень – это обычно пароль, а второй – токен из приложения, установленного на телефоне, SMS с уникальным кодом,
отпечаток пальца или голос.

Давайте установим подключаемый модуль аутентификации google-authenticator, который потребует
от пользователей на своем телефоне ввести код из приложения Google Authenticator. Вы можете скачать приложение для iOS и Android.

При использовании мер безопасности всегда
важно учитывать пользовательский скилл. Разумный
вариант – использовать двухфакторную аутентификацию для входа на bastion. После
проверки подлинности юзеры должны иметь возможность ходить на другие хосты,
используя свой сертификат. Такая комбинация должна обеспечивать приемлемый
уровень безопасности и не слишком напрягать пользователей. Однако в конкретных
средах, содержащих критические производственные данные или конфиденциальную
информацию, целесообразно применять дополнительные меры безопасности.

Установка
google-authenticator

В
системах на базе RHEL/CentOS можно установить модуль google-authenticator из
репозитория EPEL:

        $ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # for RHEL/CentOS 7, change for other versions
$ sudo yum install google-authenticator
    

Для
систем на базе Debian / Ubuntu решение доступно в виде пакета
libpam-google-authenticator:

        $ sudo apt-get install libpam-google-authenticator
    

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

        $ google-authenticator -d -f -t -r 3 -R 30 -W
    

Вы также
можете запустить google-authenticator без флагов и настроить его в интерактивном
режиме.

Выполнение
предоставит QR-код, который пользователь может сканировать с помощью приложения.

Если вам
потребуется изменить какие-либо настройки в будущем, или полностью удалить
функциональность, конфигурация будет сохранена в разделе
~/.google_authenticator.

Настройка
PAM для двухфакторной аутентификации

Чтобы
заставить систему использовать коды OTP (one-time password), нужно
отредактировать конфиг PAM sshd. Добавьте следующую строку в конец файла /etc/pam.d/sshd:

        auth required pam_google_authenticator.so nullok
    

nullok
в конце строки означает, что пользователям, у которых еще не настроен
второй фактор, все равно будет разрешено войти в систему, чтобы они могли его
настроить. После того как все настроено, обязательно удалите nullok.

В
завершение, измените методы аутентификации по умолчанию, чтобы SSH не
запрашивал у пользователей пароль, если они не представляют двухфакторный
токен. Эти изменения также вносятся в файл /etc/pam.d/sshd:

  • В RHEL/CentOS закомментируйте auth substack password-auth, добавив # в начало строки: #auth substack password-auth.
  • В Debian/Ubuntu, закомментируйте @include common-auth: #@include common-auth.
  • Сохранитесь.

Настройка
SSH для двухфакторной аутентификации

Для того
чтобы сервер требовал использования такой аутентификации, внесем несколько
изменений в /etc/ssh/sshd_config:

  • изменим ChallengeResponseAuthentication no на ChallengeResponseAuthentication yes, чтобы разрешить использование pam.
  • установим список допустимых методов аутентификации, добавив следующую строку в конец файла (или отредактировав строку, если она уже существует): AuthenticationMethods publickey,keyboard-interactive

На этом
этапе вы должны перезапустить sshd с помощью systemctl restart sshd. Убедитесь,
что вы оставили SSH-соединение открытым, чтобы при необходимости исправить ошибки. Перезапуск SSH оставит существующие соединения активными, но если есть проблема с конфигурацией, новые соединения могут быть запрещены.

Тестируем

Подключаемся
к bastion-у и видим приглашение:

        $ ssh bastion.example.com
Verification code:
    

Вводим код, представленный приложением Google Authenticator. Если вы проверите журнал
sshd и если все настроено верно, перед вами будет следующее:

        Mar 23 16:51:13 ip-172-31-33-142.ec2.internal sshd[29340]: Accepted keyboard-interactive/pam for gus from 1.2.3.4 port 42622 ssh3
    

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

советы и лайфхаки / Блог компании Microsoft / Хабр

В предыдущем посте о Remote SSH мы рассмотрели, как настроить виртуальную машину Linux и подключиться к виртуальной машине с помощью расширения Remote — SSH в Visual Studio Code. В этом посте мы расскажем о некоторых советах и приемах, которые вы можете использовать, чтобы максимально эффективно пользоваться удаленной настройкой.

Подключение с использованием Remote SSH

Расширение Visual Studio Code Remote — SSH позволяет подключаться к удаленной машине или виртуальной машине с использованием SSH, и все изнутри VS Code. Если расширение еще не установлено, можно выполнить поиск «remote ssh» во вкладке «Расширения» (⇧⌘X).

После установки расширения вы увидите индикатор в нижнем левом углу строки состояния. Этот индикатор говорит вам, в каком контексте работает VS Code (локальный или удаленный). Нажмите на индикатор, чтобы вызвать список команд удаленного расширения.

Файл конфигурации SSH

В предыдущем посте об удаленном SSH мы подключались только к одной машине и, когда это было предложено, вводили «user@host». Если вы регулярно подключаетесь к нескольким удаленным серверам или локальным виртуальным машинам, есть лучший способ подключения без необходимости запоминать все имена пользователей, адреса и дополнительные параметры конфигурации.

OpenSSH поддерживает использование файла конфигурации для хранения всех ваших различных SSH-соединений. Чтобы использовать файл конфигурации SSH, нажмите на удаленный индикатор, чтобы вызвать удаленные команды, выберите «Open Configuration File», и выберете файл, который находится в «Users/{yourusername}/.ssh/config».

Вот пример файла конфигурации SSH:

# Читайте подробности о файлах конфигурации SSH: https://linux.die.net/man/5/ssh_config
Host python-linux-vm
    HostName <vm address>
    User sana
    IdentityFile ~/.ssh/id_python_vm

Host node-vm
    HostName <vm address>
    User sana
    Port 5522
    IdentityFile ~/.ssh/id_node_vm

Существует много других параметров конфигурации, которые вы можете указать в формате файла конфигурации SSH. Вы получите дополнения в этом файле, и вы можете нажать (⌃Space) для IntelliSense, чтобы узнать больше о параметрах конфигурации.

Опции, использованные выше:

Вы можете добавить информацию для всех хостов, которые у вас есть. После сохранения файла конфигурации вы сможете увидеть эти узлы в Remote Explorer, а также любые папки, которые вы открыли на этом узле. Вы можете выбрать значок рядом с каждым хостом или папкой, и он запустит новое окно VS Code (экземпляр) и соединит вас с этим хостом. На снимке экрана ниже я подключен к своей удаленной машине «python-linux-vm», и Remote Explorer показывает мне папки, к которым я подключался в прошлом, а также любые перенаправленные порты с удаленной машины.

ProxyCommand

Иногда вам может потребоваться подключиться с вашего настольного компьютера или ноутбука к удаленному компьютеру через интранет вашей компании или за брандмауэром. В этом случае вы можете использовать промежуточный сервер или jump-box. Этот тип настройки полезен, если вы работаете в защищенной системе, которая настроена на прием SSH-соединений только от фиксированного набора хостов.

Чтобы использовать настройку jump-box с расширением Remote — SSH, вы можете использовать параметр конфигурации ProxyCommand. Эта конфигурация откроет фоновое SSH-соединение с jump-box, а затем подключится через частный IP-адрес к цели.

Вы можете установить параметр конфигурации ProxyCommand в файле конфигурации SSH следующим образом:

# Jump box с публичным IP-адресом
Host jump-box
    HostName 52.179.157.97
    User sana
    IdentityFile ~/.ssh/jumpbox

# Целевая машина с приватным IP-адресом
Host target-box
    HostName <IP address of target>
    User sana
    IdentityFile ~/.ssh/target
    ProxyCommand ssh -q -W %h:%p jump-box

ControlMaster

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

Вместо того, чтобы открывать несколько соединений SSH, вы можете использовать опцию ControlMaster (только на клиентах macOS/Linux), чтобы повторно использовать существующее соединение и сократить количество раз, когда вы должны вводить вашу фразу-пароль.

Чтобы использовать эту функцию, добавьте следующее в ваш конфигурационный файл SSH:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

Автономный удаленный компьютер

Если вы ограничены брандмауэром или ваша компания блокирует ваши виртуальные машины, и они не могут подключиться к Интернету, расширение Remote — SSH не сможет подключиться к вашей виртуальной машине, поскольку VS Code должен загрузить компонент, называемый VS Code Server, на удаленную машину.

Однако теперь вы можете решить эту проблему с помощью нового пользовательского параметра в расширении Remote — SSH. Если вы включите параметр remote.SSH.allowLocalServerDownload, расширение сначала установит VS Code Server на клиент, а затем скопирует его на сервер через SCP.

Примечание. В настоящее время это экспериментальная функция, но она будет включена по умолчанию в следующем выпуске.

Remote — SSH Nightly extension

Если вы хотите протестировать новые обновления и экспериментальные функции, как только они станут доступны, установите расширение Remote — SSH Nightly (сначала удалите стабильное расширение Remote-SSH). Это ночная сборка расширения, где мы экспериментируем с новыми функциями и настройками, прежде чем добавить их в стабильную версию.

Как использовать SSH для подключения к удаленному серверу в Linux или Windows

Удаленный доступ к машинам стал необходимостью давным-давно, и мы едва ли можем представить, как бы это было, если бы мы не могли управлять компьютерами из удаленных мест. Существует много способов установить соединение с удаленным компьютером в зависимости от используемой вами операционной системы, но наиболее часто используются следующие два протокола:

  • Secure Shell (SSH) для компьютеров под управлением Linux
  • Протокол удаленного рабочего стола (RDP) для компьютеров под управлением Windows

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

Высокопроизводительные выделенные серверы от 199,00 $ 90,00 $ / мес

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

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

Secure Shell, иногда называемый Secure Socket Shell , — это протокол, который позволяет вам безопасно подключаться к удаленному компьютеру или серверу с помощью текстового интерфейса.

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

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

Чтобы установить соединение SSH, вам потребуются два компонента: клиент и соответствующий компонент на стороне сервера. Клиент SSH — это приложение, которое вы устанавливаете на компьютер, которое вы будете использовать для подключения к другому компьютеру или серверу.Клиент использует предоставленную информацию об удаленном хосте, чтобы инициировать соединение, и, если учетные данные проверены, устанавливает зашифрованное соединение.

На стороне сервера есть компонент, называемый демоном SSH, который постоянно прослушивает определенный порт TCP / IP на предмет возможных запросов на подключение клиента. Как только клиент инициирует соединение, демон SSH ответит программным обеспечением и версиями протокола, которые он поддерживает, и они обменяются своими идентификационными данными.Если предоставленные учетные данные верны, SSH создает новый сеанс для соответствующей среды.

Версия протокола SSH по умолчанию для SSH-сервера и SSH-клиента — версия 2.

Как включить SSH-соединение

Поскольку для создания SSH-соединения требуются и клиентский, и серверный компоненты, вам необходимо убедиться, что они установлены на локальном и удаленном компьютере соответственно. Инструмент SSH с открытым исходным кодом, широко используемый для дистрибутивов Linux, — это OpenSSH.Установить OpenSSH относительно просто. Для этого требуется доступ к терминалу на сервере и компьютеру, который вы используете для подключения. Обратите внимание, что в Ubuntu по умолчанию SSH-сервер не установлен.

Как установить клиент OpenSSH

Перед тем, как продолжить установку клиента SSH, убедитесь, что он еще не установлен. Во многих дистрибутивах Linux уже есть клиент SSH. На компьютерах с Windows вы можете установить PuTTY или любой другой клиент по вашему выбору, чтобы получить доступ к серверу.

Чтобы проверить, доступен ли клиент в вашей системе на базе Linux, вам необходимо:

  1. Загрузите SSH-терминал. Вы можете выполнить поиск по запросу «терминал» или нажать CTRL + ALT + T на клавиатуре.
  2. Введите ssh и нажмите Введите в терминале.
  3. Если клиент установлен, вы получите ответ, который выглядит так:
  имя пользователя @ host: ~ $ ssh

использование: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:] порт] [-E файл_журнала] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-J [пользователь @] хост [: порт]] [-L адрес] [-l имя_входа] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [- R-адрес] [-S ctl_path] [-W хост: порт] [-w local_tun [: remote_tun]]
[пользователь @] имя хоста [команда]

имя пользователя @ хост: ~ $  

Это означает, что вы готовы удаленно подключиться к физической или виртуальной машине.В противном случае вам придется установить клиент OpenSSH:

  1. Выполните следующую команду, чтобы установить клиент OpenSSH на свой компьютер:
    sudo apt-get install openssh-client
  2. При запросе введите пароль суперпользователя.
  3. Нажмите Enter, чтобы завершить установку.

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

Как установить сервер OpenSSH

Чтобы принимать SSH-соединения, на машине должна быть серверная часть программного инструментария SSH.

Если вы сначала хотите проверить, доступен ли сервер OpenSSH в системе Ubuntu на удаленном компьютере, который должен принимать соединения SSH, вы можете попробовать подключиться к локальному хосту:

  1. Откройте терминал на сервере. Вы можете выполнить поиск по слову «терминал» или нажать CTRL + ALT + T на клавиатуре.
  2. Введите ssh localhost и нажмите Enter.
  3. Для систем без установленного сервера SSH ответ будет выглядеть примерно так:
  имя пользователя @ host: ~ $ ssh localhost
ssh: подключиться к хосту localhost порт 22: в соединении отказано имя пользователя @ хост: ~ $  

Если это так, вам необходимо установить сервер OpenSSH. Оставьте терминал открытым и:

  1. Выполните следующую команду для установки сервера SSH:
  sudo apt-get install openssh-server ii. 
  1. Введите ваш пароль суперпользователя , когда его спросят.
  2. Введите и Y , чтобы продолжить установку после запроса места на диске.

Необходимые файлы поддержки будут установлены, а затем вы сможете проверить, работает ли SSH-сервер на машине, набрав эту команду:

  sudo service ssh status  

Ответ в терминале должен выглядеть примерно так, если служба SSH теперь работает правильно:

  имя пользователя @ хост: - $ sudo service ssh status
• ssh.service - сервер OpenBSD Secure Shell
Загружено: загружено (/lib/systemd/system/ssh.service; включено; предустановка поставщика: enab
Активен: активен (работает) с Fr 2018-03-12 10:53:44 CET; 1мин 22с назад Процесс: 1174 ExecReload = / bin / kill -HUP $ MAINPID (code = exited, status = 0 / SUCCES

Основной PID: 3165 (sshd)  

Еще один способ проверить, правильно ли установлен сервер OpenSSH и принимает ли он соединения, — это попытаться снова запустить команду ssh localhost в командной строке терминала.При первом запуске команды ответ будет похож на этот экран:

  имя пользователя @ хост: ~ $ ssh localhost

Подлинность хоста localhost (127.0.0.1) не может быть установлена. Отпечаток ключа ECDSA - SHA256: 9jqmhko9Yo1EQAS1QeNy9xKceHFG5F8W6kp7EX9U3Rs. Вы уверены, что хотите продолжить подключение (да / нет)? да
Предупреждение: «localhost» (ECDSA) постоянно добавлен в список известных хостов.

имя пользователя @ хост: ~ $  

Введите да или y , чтобы продолжить.

Поздравляем! Вы настроили свой сервер для приема запросов на соединение SSH от другого компьютера
с использованием клиента SSH.

ТИП

Теперь вы можете редактировать файл конфигурации демона SSH, например, вы можете изменить порт по умолчанию для SSH-соединений. В командной строке терминала запустите эту команду:

  Судо нано / и т. Д. / Ssh / sshd_config  

Файл конфигурации откроется в выбранном вами редакторе. В данном случае мы использовали Nano.

Если вам нужно установить Nano, выполните эту команду:

  sudo apt-get install nano  

Обратите внимание, что вам необходимо перезапустить

.

Подключиться к серверу по SSH

Получить учетные данные SSH

Какое имя пользователя SSH мне следует использовать для безопасного доступа оболочки к моему приложению?

Имя пользователя SSH: bitnami

Получите учетные данные SSH из консоли AWS

Если вы используете консоль AWS, вы либо создали и загрузили пару ключей SSH, либо загрузили ее при первом развертывании сервера. Проверьте следующие разделы, чтобы узнать, где можно создать или загрузить ключи SSH на консоли AWS:

  • Войдите в облачную консоль AWS.
  • Выберите опцию «Вычислить -> EC2».

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

  • На левой панели навигации щелкните пункт меню «Сеть и безопасность -> Пары ключей».

  • На открывшейся странице вы увидите список пар ключей, которые уже загружены в консоль и доступны для использования при запуске экземпляра.

    На этом экране вы также можете создать новую пару ключей, которую вы сможете загрузить позже:

    Или импортируйте со своего компьютера:

ПРИМЕЧАНИЕ. Если вы не связали пару ключей со своим сервером AWS, вы не сможете войти на него. В этом случае обратитесь в службу поддержки AWS и следуйте их инструкциям, чтобы получить доступ SSH к вашему серверу.

Получите учетные данные SSH от Amazon Lightsail

Amazon Lightsail предоставляет пару ключей SSH по умолчанию для подключения к вашему инстансу, которую вы можете загрузить в любое время.При желании вы можете изменить это в процессе развертывания. Для этого:

.

Как использовать аутентификацию с открытым ключом SSH

← Документы ServerPilot

Обзор

Аутентификация с открытым ключом — это способ входа в
Учетная запись SSH / SFTP с использованием
криптографический ключ, а не пароль.

Если вы используете очень надежные пароли SSH / SFTP, ваши учетные записи уже
защищен от атак грубой силы.
Однако использование аутентификации с открытым ключом дает много преимуществ при работе
с несколькими разработчиками.Например, с ключами SSH вы можете

  • позволяет нескольким разработчикам входить в систему как один и тот же пользователь системы без
    необходимость использования единого пароля между ними;
  • отозвать доступ одного разработчика без отмены доступа другим
    Разработчики; и
  • упрощает для одного разработчика вход во многие учетные записи
    без необходимости управлять множеством разных паролей.

Как работает аутентификация с открытым ключом

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

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

Аутентификация с открытым ключом работает следующим образом:

  1. Сгенерировать пару ключей.
  2. Дайте кому-нибудь (или серверу) открытый ключ.
  3. Позже, в любое время, когда вы захотите аутентифицироваться, человек (или сервер)
    просит вас подтвердить, что у вас есть закрытый ключ, соответствующий
    открытый ключ.
  4. Вы доказываете, что у вас есть закрытый ключ.

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

Создание пары ключей SSH

Вы должны сгенерировать свою пару ключей на портативном компьютере, а не на сервере.
Все системы Mac и Linux включают команду ssh-keygen.
это создаст новую пару ключей.

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

Чтобы сгенерировать пару ключей SSH, выполните команду ssh-keygen.

 ssh-keygen 

При запуске он будет выглядеть так:

 laptop1: ~ ваше имя $ ssh-keygen
Создание пары ключей открытого и закрытого типа RSA. 

Вам будет предложено выбрать место для хранения ключей.
Местоположение по умолчанию подходит, если у вас еще нет ключа.Нажмите Введите , чтобы выбрать местоположение по умолчанию.

 Введите файл, в котором следует сохранить ключ (/Users/yourname/.ssh/id_rsa): 

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

 Введите кодовую фразу (пусто, если кодовая фраза отсутствует):
Введите ту же парольную фразу еще раз: 

После того, как вы выберете пароль, ваш открытый и закрытый ключи будут
генерируется.Будет два разных файла.
Ключ с именем id_rsa — это ваш закрытый ключ.
Тот, что называется id_rsa.pub, является вашим открытым ключом.

 Ваш идентификатор был сохранен в /Users/yourname/.ssh/id_rsa.
Ваш открытый ключ был сохранен в /Users/yourname/.ssh/id_rsa.pub. 

Вам также покажут отпечаток пальца и «визуальный отпечаток пальца»
твой ключ.
Вам не нужно их сохранять.

 Отпечаток ключа:
d7: 21: c7: d6: b8: 3a: 29: 29: 11: ae: 6f: 79: bc: 67: 63: 53 ваше имя @ laptop1
Изображение ключа randomart:
+ - [RSA 2048] ---- +
| |
| .о |
| . . *. |
| . . = o |
| Операционные системы . о |
| . . o oE |
| . .oo +. |
| .o.o. *. |
| .... = o |
+ ----------------- + 

Настройка пользователя SSH / SFTP для вашего ключа

Метод 1: Использование ssh-copy-id

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

Чтобы скопировать открытый ключ на сервер, выполните следующую команду.Обязательно замените «x.x.x.x» на IP-адрес вашего сервера.
и SYSUSER с именем системного пользователя, которому принадлежит ваше приложение.

 идентификатор-копии-ssh [email protected] 

Метод 2: Ручная настройка

Если у вас нет команды ssh-copy-id (например, если вы
используете Windows), вы можете вместо этого подключиться к серверу по SSH и вручную создать
.ssh / authorized_keys, чтобы он содержал ваш открытый ключ.

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

 (umask 077 && test -d ~ / .ssh || mkdir ~ / .ssh)
(umask 077 && коснитесь ~ / .ssh / authorized_keys) 

Затем отредактируйте файл .ssh / authorized_keys с помощью предпочитаемого редактора.
Скопируйте и вставьте файл id_rsa.pub в файл.

Войти, используя свой закрытый ключ

Теперь вы можете подключиться к серверу по SSH или SFTP, используя свой закрытый ключ.
В командной строке вы можете использовать:

 ssh [email protected] 

Если вы не создали ключ в местоположении по умолчанию, вам понадобится
указать местонахождение:

 ssh -i ~ /.ssh / custom_key_name [email protected] 

Если вы используете SSH-клиент Windows, например PuTTy, загляните в
параметры конфигурации, чтобы указать путь к вашему закрытому ключу.

Предоставление доступа к нескольким клавишам

Файл .ssh / authorized_keys, который вы создали выше, использует очень простой
формат: он может содержать много ключей, если вы поместите по одному ключу на каждый
строка в файле.

Если у вас несколько ключей (например, по одному на каждом из ваших ноутбуков) или
нескольким разработчикам, которым вам нужно предоставить доступ, просто следуйте
те же инструкции, что и выше, с использованием ssh-copy-id или ручным редактированием
файл, чтобы вставить дополнительные ключи, по одному в каждой строке.

Когда вы закончите, файл .ssh / authorized_keys будет выглядеть примерно так
это (не копируйте это, используйте свои собственные открытые ключи):

 SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAABAQDSkT3A1j89RT / 540ghIMHXIVwNlAEM3WtmqVG7YN / wYwtsJ8iCszg4 / lXQsfLFxYmEVe8L9atgtMGCi5QdYPl4X / с + 5YxFfm88Yjfx + 2xEgUdOr864eaI22yaNMQ0AlyilmK + PcSyxKP4dzkf6B5Nsw8lhfB5n9F5md6GHLLjOGuBbHYlesKJKnt2cMzzS90BdRk73qW6wJ + MCUWo + cyBFZVGOzrjJGEcHewOCbVs + IJWBFSi6w1enbKGc + RY9KrnzeDKWWqzYnNofiHGVFAuMxrmZOasqlTIKiC2UK3RmLxZicWiQmPnpnjJRo7pL0oYM9r / sIWzD6i2S9szDy6aZ микрофон @ laptop1
SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAABAQCzlL9Wo8ywEFXSvMJ8FYmxP6HHHMDTyYAWwM3AOtsc96DcYVQIJ5VsydZf5 / 4NWuq55MqnzdnGB2IfjQvOrW4JEn0cI5UFTvAG4PkfYZb00Hbvwho8JsSAwChvWU6IuhgiiUBofKSMMifKg + pEJ0dLjks2GUcfxeBwbNnAgxsBvY6BCXRfezIddPlqyfWfnftqnafIFvuiRFB1DeeBr24kik / 550MaieQpJ848 + MgIeVCjko4NPPLssJ / 1jhGEHOTlGJpWKGDqQK + QBaOQZh7JB7ehTK + pwIFHbUaeAkr66iVYJuC05iA7ot9FZX8XGkxgmhlnaFHNf0l8ynosanqt генри @ laptop2 

Дополнительная информация

Получите ваш открытый ключ из вашего закрытого ключа

Следующая команда получит открытый ключ из закрытого ключа:

 ssh-keygen -y -f / path / to / your_private_key_file (например,/root/.ssh/id_rsa или ~ / .ssh / custom_key_name) 

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

Обратите внимание, что вы не можете получить закрытый ключ, если у вас есть только открытый
ключ.

Исправление разрешений для каталога .ssh

Инструкции в этой статье создадут на вашем сервере каталог .ssh.
и файл .ssh / authorized_keys с правильными разрешениями.Однако, если вы создали их сами и вам нужно исправить разрешения,
вы можете запустить следующие команды на своем сервере, пока SSH подключен как
системный пользователь вашего приложения.

 chmod 700 ~ / .ssh
chmod 600 ~ / .ssh / authorized_keys 

Отключение аутентификации по паролю

ПРИМЕЧАНИЕ: При изменении любого способа доступа к SSH
(порты, методы аутентификации и так далее), очень настоятельно рекомендуется оставить активный корневой сеанс SSH открытым
пока все не заработает как задумано.Это гарантирует, что у вас есть способ отменить изменения в случае, если что-то пойдет не так.
и логины не работают должным образом.

В качестве дополнительной меры безопасности после настройки ключей SSH вы можете полностью отключить аутентификацию по паролю.
Это будет означать, что ни один пользователь не сможет войти в SSH или SFTP без ключей SSH. Любой, кто вводит пароль, получит сообщение типа:

 В доступе отказано (открытый ключ, пароль). 

или:

 Нет поддерживаемых методов аутентификации 

Отключение аутентификации по паролю — отличный способ повысить безопасность сервера.См. Наше руководство
вот шаги для достижения этой цели.

Затем проверьте, можете ли вы войти в систему с паролем, открыв новый сеанс SSH или SFTP для сервера.
Пароли нельзя использовать, и, если все было сделано правильно, выдается ошибка, когда кто-то пытается использовать пароль.
Если этот параметр не будет изменен обратно, чтобы разрешить аутентификацию по паролю,
ни один пользователь не сможет войти в систему без настройки ключа SSH.

Последнее изменение: 9 февраля 2020 г.

.

22 примера SSH, практические советы и туннели

Практические примеры SSH, которые поднимут вашу игру удаленного системного администратора на новый уровень. Команды и советы не только по использованию SSH , но и по освоению способов перемещения по сети.

Знание нескольких приемов ssh принесет пользу любому системному администратору , сетевому инженеру или специалисту по безопасности .

Практические примеры SSH

Даже если вы опытный гуру * nix , есть пара примеров ниже, которые доступны только в более поздних версиях OpenSSH.Взгляните на Proxy Jump -J и обратную динамическую пересылку -R .

Первый Основы

Нарушение командной строки SSH

В следующем примере команды ssh используются общие параметры, часто встречающиеся при подключении к удаленному серверу SSH .

 локальный хост: ~ $ ssh -v -p 22 -C neo @ удаленный сервер 

-v: распечатать отладочную информацию, особенно полезную при отладке проблемы аутентификации. Может использоваться несколько раз для печати дополнительной информации.
-p 22: укажите порт для подключения к на удаленном SSH-сервере. 22 не требуется, так как это значение по умолчанию, но если какой-либо другой порт прослушивает, подключитесь к нему с помощью параметра -p . Порт прослушивания настраивается в файле sshd_config с использованием формата Port 2222 .
-C: С помощью этого параметра для соединения разрешено сжатие. Если вы используете терминал по медленной ссылке или просматриваете много текста, это может ускорить соединение, так как он сжимает данные, передаваемые на лету.
neo @: строка перед символом @ обозначает имя пользователя для аутентификации на удаленном сервере. Если вы не укажете пользователя @ , по умолчанию будет использоваться имя пользователя учетной записи, в которую вы сейчас вошли (~ $ whoami). Пользователь также может быть указан с помощью параметра -l . Удаленный сервер
: имя хоста , к которому подключается ssh , это может быть полное доменное имя, IP-адрес или любой хост в файле hosts на вашем локальном компьютере. Чтобы подключиться к хосту, который разрешает как IPv4 , так и IPv6 , вы можете указать параметр -4 или -6 в командной строке, чтобы он разрешился правильно.

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

Использование файла конфигурации

Хотя многие пользователи знакомы с файлом sshd_config , существует также файл конфигурации клиента для команды ssh . По умолчанию это ~ / .ssh / config , но также может быть указано в качестве параметра с опцией -F .

 Хост удаленного сервера
     HostName remoteserver.thematrix.io
     Пользователь neo
     Порт 2112
     IdentityFile / home / test /.ssh / remoteserver.private_key

Хост *
     Порт 2222 

В приведенном выше примере файла конфигурации ssh вы можете увидеть две записи Host . Первая — это конкретная запись хоста с настроенным Port 2112 , а также настраиваемый файл IdentifyFile и имя пользователя. Второй — это подстановочный знак * , который будет соответствовать всем хостам. Обратите внимание, что — первая найденная опция конфигурации, будет использоваться , поэтому наиболее конкретная должна быть в верхней части конфигурации.Дополнительную информацию можно найти на странице руководства ( man ssh_config ).

Файл конфигурации позволяет сэкономить много времени на вводе текста за счет включения ярлыков расширенной конфигурации при каждом подключении к определенным хостам.

Копирование файлов через SSH с SCP

Клиент ssh поставляется с двумя другими очень удобными инструментами для перемещения файлов через зашифрованное соединение ssh . Команды: scp и sftp . См. Примеры ниже для базового использования.Обратите внимание, что многие параметры для ssh также могут применяться к этим командам.

 локальный хост: ~ $ scp mypic.png neo @ удаленный сервер: /media/data/mypic_2.png 

В этом примере файл mypic.png был скопирован на удаленный сервер в расположение файловой системы / media / data и переименован в mypic_2.png .

Не забывайте разницу в параметре порта . Это ошибка, которая поражает всех, кто использует scp в командной строке.Параметр порта — -P , а не -p , как в клиенте ssh .!. Вы забудете, но не волнуйтесь, все забывают.

Для тех, кто знаком с командной строкой ftp , многие команды аналогичны при использовании sftp . Вы можете нажать , положить и ls по своему желанию.

 sftp neo @ удаленный сервер 

Практические примеры

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

1. Прокси-трафик через SSH с использованием SOCKS

Функция прокси-сервера SSH была помещена под номером 1 не зря. Это более мощный инструмент, чем думают многие пользователи, поскольку он дает вам доступ к любой системе, доступной удаленному серверу, с использованием практически любого приложения. Клиент ssh может туннелировать трафик через соединение, используя прокси-сервер SOCKS с быстрым одним лайнером.Ключевой момент, который нужно понять, это то, что трафик к удаленным системам будет иметь источник удаленного сервера. Например, в файле журнала веб-сервера.

 локальный: ~ $ ssh -D 8888 пользователь @ удаленный сервер

локальный: ~ $ netstat -pan | grep 8888
tcp 0 0 127.0.0.1:8888 0.0.0.0:* СЛУШАТЬ 23880 / ssh 

Здесь мы запускаем прокси-сервер socks, работающий на TCP-порту 8888, вторая команда проверяет, что порт теперь прослушивает. 127.0.0.1 указывает, что служба работает только на локальном хосте.Мы можем использовать немного другую команду для прослушивания на всех интерфейсах, включая Ethernet или Wi-Fi, это позволит другим приложениям (браузерам или другим) в нашей сети подключаться к службе ssh socks proxy .

 localhost: ~ $ ssh -D 0.0.0.0:8888 пользователь @ удаленный сервер 

Теперь мы можем настроить наш браузер для подключения к прокси-серверу socks. В Firefox выберите настройки | общий | сетевые настройки . Добавьте IP-адрес и порт для подключения браузера.

Обратите внимание на опцию в нижней части формы, чтобы заставить DNS-запросы браузера также проходить через прокси-сервер socks . Если вы используете прокси-сервер для шифрования веб-трафика в локальной сети, вам обязательно нужно выбрать эту опцию, чтобы DNS-запросы также туннелировались через SSH-соединение.

Включить прокси-сервер Socks в Chrome

Использование параметра командной строки при запуске Chrome будет использовать socks прокси , а также туннель DNS запросов от браузера через socks5 прокси.Доверяйте, но проверяйте, используйте tcpdump (tcpdump, а не порт 22), чтобы убедиться, что DNS-запросы больше не видны.

 localhost: ~ $ google-chrome --proxy-server = "socks5: //192.168.1.10: 8888" 
Использование других приложений с прокси

Имейте в виду, что существует множество других приложений, которые могут использовать прокси-сервер socks . Веб-браузер просто самый популярный. Некоторые приложения будут иметь параметры конфигурации для использования прокси. Другим может потребоваться помощь с помощью вспомогательной программы, которая поддерживает протокол socks.Примером этого являются проксичейны. Используя этот инструмент, мы можем, например, использовать Microsoft RDP через прокси-сервер socks.

 локальный: ~ $ proxychains rdesktop $ RemoteWindowsServer 

Параметры конфигурации для прокси-сервера socks задаются в файле конфигурации proxychains.

Горячий совет: используете удаленный рабочий стол из Linux в Windows? Попробуйте клиент FreeRDP. Более современная реализация, чем rdesktop , с гораздо более плавным взаимодействием.

Пример использования прокси-сервера SSH Socks

Вы находитесь в кафе или отеле и используете несколько отрывочный WIFI.На нашем ноутбуке мы запускаем прокси ssh локально и устанавливаем туннель ssh в нашу домашнюю сеть с помощью нашего локального Rasberry Pi. Используя браузер или другие приложения, настроенные для прокси-сервера SOCKS, мы можем получить доступ к любым сетевым службам в нашей домашней сети или выйти в Интернет через наше домашнее сетевое соединение. Все между нашим ноутбуком и домашним сервером (через Wi-Fi и Интернет до дома) зашифровано в туннеле SSH.

2. SSH-туннель (порт вперед)

В своей простейшей форме туннель SSH открывает порт в вашей локальной системе, который подключается к другому порту на другом конце туннеля.

 localhost: ~ $ ssh -L 9999: 127.0.0.1: 80 пользователь @ удаленный сервер 

Давайте разберем параметр -L. Думайте о -L как о локальной стороне прослушивания. Итак, в нашем примере выше порт 9999 прослушивает локальный хост, а порт перенаправляет его через порт 80 на удаленном сервере , обратите внимание, что 127.0.0.1 относится к localhost на удаленном сервере!

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

 localhost: ~ $ ssh -L 0.0.0.0:9999:127.0.0.1:80 пользователь @ удаленный сервер 

В этих примерах порт, который мы подключаем, является прослушивающим веб-сервером. Это также может быть прокси-сервер или любая другая служба TCP.

3. Перенаправление туннеля SSH на вторичный удаленный хост

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

 локальный: ~ $ ssh -L 0.0.0.0:9999:10.10.10.10: 80 пользователей на удаленном сервере 

В этом примере мы перенаправляем туннель с удаленного сервера на веб-сервер, работающий 10.10.10.10. Трафик с удаленного сервера -> 10.10.10.10 — это , который больше не находится в туннеле ssh . Веб-сервер 10.10.10.10 будет видеть удаленный сервер как источник веб-запросов.

4. Обратный туннель SSH

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

 localhost: ~ $ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 пользователь @ удаленный сервер 

С этим сеансом ssh установлено соединение с удаленным сервером . порт 1999 будет перенаправлен на порт 902 на нашем локальном клиенте.

5. Обратный прокси SSH

В этом случае мы устанавливаем прокси-сервер SOCKS с нашим ssh-соединением, однако прокси прослушивает на стороне удаленного сервера. С подключениями к этому удаленному прокси-серверу socks, который теперь выходит из туннеля как трафик, исходящий от нашего локального хоста. Требуется OpenSSH версии 7.6+ .

 localhost: ~ $ ssh -v -R 0.0.0.0:1999 192.168.1.100 пользователь @ удаленный сервер 
Устранение неполадок удаленных туннелей SSH

Если у вас возникли проблемы с работой параметров удаленного SSH, проверьте с помощью netstat , к какому интерфейсу подключен порт прослушивания. Несмотря на то, что мы указали 0.0.0.0 в приведенных выше примерах, если для GatewayPorts установлено значение no в sshd_config , тогда слушатель будет связываться только с localhost (127.0.0.1).

Предупреждение безопасности
Обратите внимание, что когда вы открываете туннели и socks-прокси, вы можете подвергать внутренние сетевые ресурсы незащищенным сетям (например, Интернету!). Это может быть серьезной угрозой безопасности, поэтому убедитесь, что вы понимаете, что слушает и к чему у него есть доступ.

6. Установите VPN через SSH

Распространенный термин среди атакующих специалистов по безопасности (пентестеры / красные команды и т. Д.) — это поворот в сеть. После того, как вы установили соединение в одной системе, эта система становится точкой шлюза для дальнейшего доступа к сети.Это называется поворотом и обеспечивает боковое перемещение по сети.

Мы можем использовать для этого прокси SSH и прокси-цепочек , однако есть некоторые ограничения. Например, мы не можем использовать сырые сокеты, поэтому сканирование Nmap SYN не может использоваться для сканирования портов внутренней сети.

Используя эту более продвинутую опцию VPN, мы перемещаем возможность подключения на уровень 3 . Затем мы можем направлять трафик через туннель, используя стандартную сетевую маршрутизацию.

Этот метод использует ssh , iptables , tun интерфейсы и маршрутизацию.

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

 PermitRootLogin да
PermitTunnel есть 

Затем мы установим наше ssh соединение, используя параметр, который запрашивает инициализацию tun устройств.

 localhost: ~ # ssh -v -w любой корень @ удаленный сервер 

Теперь у вас должно быть устройство tun , когда вы показываете интерфейсы ( # ip a ).Следующим шагом будет добавление IP-адресов к туннельным интерфейсам.

Сторона клиента SSH:

 localhost: ~ # ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
локальный: ~ # IP tun0 до 

Сторона сервера SSH:

 удаленный сервер: ~ # ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
удаленный сервер: ~ # ip tun0 up 

Теперь у нас должен быть прямой маршрут к другому хосту ( route -n и ping 10.10.10.10 ).

Теперь можно маршрутизировать любую подсеть через другой узел.

 localhost: ~ # route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0 

На удаленной стороне нам нужно включить ip_forward и iptables .

Удаленный сервер

: ~ # echo 1> / proc / sys / net / ipv4 / ip_forward
удаленный сервер: ~ # iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j ​​MASQUERADE 

Бум! VPN третьего уровня через туннель SSH . Вот это победа.

Любые проблемы, попробуйте tcpdump и ping , чтобы увидеть, где он сломан.Поскольку мы играем на уровне 3, наши пакеты icmp должны проходить через этот туннель.

7. Скопируйте свой SSH-ключ (ssh-copy-id)

Есть несколько способов добиться этого, однако эта команда является ярлыком, который экономит время. Что он на самом деле делает? Эта команда повторяет то, что вы также можете сделать вручную. Копирование ключа ~ / .ssh / id_rsa.pub (или по умолчанию) из вашей системы и добавление его в файл ~ / .ssh / authorized_keys на удаленном сервере.

 localhost: ~ $ ssh-copy-id пользователь @ удаленный сервер 

8. Удаленный запуск команды (неинтерактивный)

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

 localhost: ~ $ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php 

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

Другой пример выполняет ту же функцию, что и сокращение ssh-copy-id в совете 7.

 localhost: ~ $ cat ~ / .ssh / id_rsa.pub | ssh удаленный сервер 'cat >> .ssh / authorized_keys' 

9. Удаленный захват и просмотр пакетов в Wireshark

Я взял это из наших примеров tcpdump.Используйте его для удаленного захвата пакетов с подачей результатов непосредственно в локальный графический интерфейс Wireshark.

: ~ $ ssh root @ remoteserver 'tcpdump -c 1000 -nn -w - не порт 22' | wirehark -k -i - 

10. SSH-копирование папки с локального на удаленное

Изящный трюк, который сжимает папку с помощью bzip2 (это -j в команде tar ), а затем извлекает поток bzip2 с другой стороны, создавая дубликат папки на удаленном сервере.

 localhost: ~ $ tar -cvj / datafolder | удаленный сервер ssh "tar -xj -C / datafolder" 

Копировать удаленную папку в локальный tar-архив

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

 localhost: ~ $ ssh user @ remoteserver "tar -jcf - / path / to / backup"> dir.tar.bz2 

11. Приложения удаленного графического интерфейса с перенаправлением SSH x11

Если и на клиенте, и на удаленном сервере установлен X.Можно удаленно запустить команду графического интерфейса пользователя, при этом окно будет отображаться на локальном рабочем столе. Эта функция существует с незапамятных времен, но все еще может быть очень полезной. Запустите удаленный веб-браузер или даже консоль VMWawre Workstation, как я в этом примере.

 локальный: ~ $ ssh -X удаленный сервер vmware 

Требуется X11Forwarding yes в sshd_config .

12. Удаленное копирование файлов с помощью rsync и SSH

Использование rsync имеет много преимуществ по сравнению с scp , если периодически требуется резервное копирование каталога, большого количества файлов или очень больших файлов, его следует использовать.Он может восстанавливаться после неудачных передач и копировать только различия между двумя местоположениями, экономя полосу пропускания и время.

В данном примере используется сжатие gzip (-z) и режим архивирования (-a), который включает рекурсивное копирование.

: ~ $ rsync -az / home / testuser / удаленный сервер данных: резервное копирование / 

13. SSH через сеть Tor

Анонимная сеть Tor Network может туннелировать трафик SSH с помощью команды torsocks . Следующая команда проксирует соединение ssh через сеть Tor.

 localhost: ~ $ torsocks ssh myuntracableuser @ удаленный сервер 

Torsocks будет использовать порт localhost 9050 для прокси-трафика. Как всегда, при использовании tor необходимо серьезно подумать, чтобы понять, какой трафик туннелируется, и другие проблемы безопасности (opsec). Куда идут ваши DNS-запросы ?

14. SSH в экземпляр EC2

При использовании SSH для подключения к инстансу EC2 в Amazon вам потребуется закрытый ключ.Загрузите ключ (расширение .pem) из панели управления Amazon EC2 и измените разрешения ( chmod 400 my-ec2-ssh-key.pem . Сохраните этот ключ в надежном месте или поместите его в свой ~ / .ssh / папка.

 локальный хост: ~ $ ssh -i ~ / .ssh / my-ec2-key.pem ubuntu @ my-ec2-public 

Параметр -i указывает клиенту ssh использовать этот ключ. Это был бы идеальный пример того, где использовать ~ / .ssh / config для автоматической настройки использования ключа при подключении к хосту ec2.

 Хост my-ec2-public
   Имя хоста ec2 ???. Compute-1.amazonaws.com
   Пользователь ubuntu
   IdentityFile ~ / .ssh / my-ec2-key.pem 

15. Редактируйте текстовые файлы с помощью VIM через ssh / scp

Для всех тех пользователей vim это может сэкономить время. Используя vim , мы можем редактировать файлы более scp с помощью одной команды. Использование этого метода создает файл в / tmp в локальной системе, а затем копирует его обратно, как только мы запишем файл в vim .

 localhost: ~ $ vim scp: // пользователь @ удаленный сервер // и т. Д. / Хосты 

Обратите внимание, что формат немного отличается от обычного scp . После хоста идет двойной // . Это ссылается на абсолютный путь. Одиночная косая черта будет иметь путь относительно домашнего каталога пользователя.

 ** предупреждение ** (netrw) не может определить метод (формат: протокол: // [пользователь @] имя хоста [: порт] / [путь]) 

Если вы видите эту ошибку, дважды проверьте формат вашей команды. Обычно это означает синтаксическую ошибку.

16. Подключите удаленное местоположение SSH как локальную папку с SSHFS

Используя sshfs — клиент файловой системы ssh , мы можем смонтировать локальный каталог в удаленное место, при этом все взаимодействие с файлами происходит в зашифрованном сеансе ssh .

 localhost: ~ $ apt установить sshfs 

В системе на основе Ubuntu и Debian мы устанавливаем пакет sshfs , а затем монтируем удаленное расположение.

 локальный: ~ $ sshfs пользователь @ удаленный сервер: / media / data ~ / data / 

17.Мультиплексирование SSH с использованием ControlPath

По умолчанию, когда у вас есть существующее соединение с удаленным сервером с ssh , второе соединение с использованием ssh или scp установит новый сеанс с накладными расходами на аутентификацию. Используя параметры ControlPath , мы можем использовать существующий сеанс для всех последующих подключений. Это значительно ускорит процесс. Это заметно даже в локальной сети, но тем более при подключении к удаленным ресурсам.

 Хост удаленного сервера
        Имя хоста remoteserver.example.org
        ControlMaster авто
        Путь управления ~/.ssh/control/%r@%h:% p
        ControlPersist 10м 

ControlPath обозначает сокет, который проверяется новыми подключениями на предмет наличия существующего сеанса ssh , который можно использовать. Опция ControlPersist выше означает, что даже после выхода из терминала существующий сеанс будет оставаться открытым в течение 10 минут, поэтому, если вы должны повторно подключиться в течение этого времени, вы будете использовать этот существующий сокет.См. Страницу ssh_config man для получения дополнительной информации.

18. Потоковое видео через SSH с использованием VLC + SFTP

Давние пользователи ssh и vlc (Video Lan Client) не всегда знают об этой удобной опции, когда вам нужно смотреть видео по сети. Использование опции vlc для File | Откройте сетевой поток, можно ввести местоположение как местоположение sftp: // . Если потребуется пароль, появится запрос для подробностей аутентификации.

 sftp: //remoteserver//media/uploads/myvideo.mkv 

19. Двухфакторная аутентификация

Большинство читателей поймут ценность использования Двухфакторной аутентификации. , те же преимущества, которые применяются к вашему банковскому счету или учетной записи Google, могут быть применены к вашей службе SSH.

Конечно, ssh поставляется с формой двухфакторной возможности, которая является парольной фразой и ключом SSH. Преимущество использования аппаратного токена или приложения Google Authenticator заключается в том, что они обычно поступают со второго физического устройства.

См. Наше 8-минутное руководство по началу работы с Google Authenticator и SSH.

20. Перепрыгивание через хосты прыжков с помощью ssh и -J

Когда сегментация сети означает, что вы перескакиваете через несколько хостов ssh , чтобы добраться до конечной сети или хоста назначения, этот ярлык хоста перехода может быть именно тем, что вам нужно. Требуется OpenSSH версии 7.3+ .

 локальный хост: ~ $ ssh -J host1, host2, host3 [email protected] 

Здесь важно понимать, что это не то же самое, что ssh host1 затем user @ host1: ~ $ ssh host2 , параметр перехода -J использует уловку переадресации, так что localhost устанавливает сеанс со следующим хостом в цепочке.Итак, наш localhost аутентифицируется с host4 в приведенном выше примере; Это означает, что используются наши ключей localhost , а сеанс с localhost на host4 — это зашифрованных от конца до конца .

Чтобы использовать эту возможность в ssh_config , используйте параметр конфигурации ProxyJump . Если вам регулярно приходится перепрыгивать через несколько хостов; используйте файл конфигурации и свой псевдоним host4 , это сэкономит вам много времени.

21. Блокировка попыток перебора SSH с помощью iptables

Любой, кто управлял службой SSH в Интернете и просматривал журналы, будет знать о количестве попыток перебора SSH , которые происходят каждый час и каждый день. Немедленный способ уменьшить шум в ваших журналах — переместить SSH на порт, отличный от 22 . Внесите изменения в файл sshd_config , используя параметр конфигурации Port ## .

Используя iptables , мы также можем блокировать попытки подключения к порту от источников, достигающих определенного порога.Один из способов сделать это — использовать OSSEC, поскольку он не только блокирует SSH, но и выполняет ряд других функций обнаружения вторжений (HIDS) на основе хоста.

22. Измените перенаправление портов в сеансе с помощью ~ C

И наш последний пример ssh предназначен для изменения перенаправления портов на лету в рамках существующего сеанса ssh . Представьте себе этот примерный сценарий. Вы глубоко в сети; возможно, вы перепрыгнули через полдюжины хостов перехода и вам нужен локальный порт на вашей рабочей станции, перенаправленный на Microsoft SMB в старой системе Windows 2003, которую вы заметили (кто-нибудь ms08-67?).

После нажатия введите , попробуйте набрать ~ C в своем терминале. Это управляющая escape-последовательность в сеансе, которая позволяет вносить изменения в существующее соединение.

 локальный: ~ $ ~ C
ssh> -h
Команды:
      -L [bind_address:] порт: host: hostport Запросить локальную пересылку
      -R [bind_address:] порт: host: hostport Запрос удаленной пересылки
      -D [bind_address:] порт Запросить динамическую пересылку
      -KL [bind_address:] порт Отменить локальную пересылку
      -KR [bind_address:] порт Отменить удаленную пересылку
      -KD [bind_address:] порт Отменить динамическую пересылку
ssh> -L 1445: удаленный-win2k3: 445
Порт пересылки.

Здесь вы видите, что мы перенаправили наш локальный порт 1445 на хост Windows 2003 , который мы нашли во внутренней сети. Теперь запустите msfconsole , и все готово (при условии, что вы планировали использовать на этом хосте ).

Заключение

Эти примеры, советы и команды ssh предназначены для того, чтобы дать вам отправную точку; дополнительные сведения о каждой из команд и возможностей доступны на страницах man ( man ssh , man ssh_config , man sshd_config ).

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

Спасибо за чтение, и если у вас есть какие-либо комментарии или предложения, напишите мне, используя контактную форму. Радоваться, веселиться!

Знай свою поверхность атаки

От OSINT к выявлению уязвимости

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *