Как подключиться по ssh к серверу из windows


Как подключиться по SSH | Losst

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

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

Содержание статьи:

Что такое SSH?

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

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

Как подключиться по SSH

Для подключения по SSH нам необходимо знать такие данные:

  • ip адрес сервера, к которому мы собираемся подключится;
  • порт, на котором ожидает подключения SSH сервер, по умолчанию используется 22, но в целях безопасности порт подключения ssh часто изменяют;
  • имя и пароль пользователя на удаленном сервере.

Больше ничего не нужно, обычно эти данные присылают в письме вместе с описанием VPS. Теперь перейдем к практике.

1. Подключение через SSH в Linux

В Linux подключение по SSH выполняется с помощью утилиты ssh. Мы более подробно рассматривали работу с ней в статье как пользоваться ssh. Для подключения к удаленному компьютеру ее синтаксис будет выглядеть следующим образом:

$ ssh имя_пользователя@айпи_адрес

Это самый простой вариант, если вам также нужно задать порт, используйте опцию -p:

$ ssh имя_пользователя@айпи_адрес -p порт

Чтобы выполнить подключение по SSH Linux нажмите Ctrl+Alt+T для открытия терминала и наберите команду, заменив нужные значения:

ssh [email protected]

Или, с нестандартным портом:

ssh [email protected] -p 2223

Если ip_адрес и порт правильные, то на следующем шаге программа попросит у вас ввести пароль:

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

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

Если же произошла ошибка и IP адрес или порт введены неверно, то вы получите ошибку Connection Refused:

Просто убедитесь что порт введен верно. Если это ваш сервер, то, возможно на нем еще нужно разрешить подключение SSH в брандмауэре. В Ubuntu/Debian для этого на удаленном сервере выполните:

sudo ufw allow 22/tcp

А в CentOS/Fedora:

firewall-cmd --permanent --zone=public --add-port=22/tcp

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

Теперь вы знаете как подключиться по ssh linux и решить проблемы с подключением. А теперь перейдем к Windows.

2. Подключение через SSH в Windows

Раньше подключение по SSH из Windows выполнялось только с помощью сторонних утилит, например PuTTY. Но в Windows 10 был добавлен встроенный OpenSSH клиент и работает он точно так же, как и в Linux. По умолчанию этот компонент не активирован. Для его установки откройте Параметры -> Приложения:

Затем выберите Управление дополнительными компонентами:

Здесь нажмите добавить новый компонент и в открывлемся меню выберите OpenSSH Client и нажмите Устанвоить:

Дальше вернитесь назад и дождитесь завершения установки. После того, как SSH клиент будет установлен нужно обязательно перезагрузить компьютер.

После перезагрузки нажмите Win+R чтобы открыть окно запуска команд и наберите в нем cmd:

Далее нажмите Enter. Перед вами откроется командная строка Windows. Здесь можно использовать утилиту ssh. Синтаксис у нее абсолютно такой же, как и для Linux:

ssh имя_пользователя@айпи_адрес -p порт

Например, такой командой можно подключится по SSH к Raspberry Pi, который находится в вашей локальной сети по адресу 192.168.1.5:

ssh [email protected]

Утилита предложит добавить устройство в список известных:

Затем предложит ввести пароль:

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

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

Выводы

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

Подключение к Windows по SSH как в Linux / Хабр

Меня всегда удручало подключение к Windows машинам. Нет, я не противник и не сторонник Microsoft и их продуктов. Каждый продукт существует для своей цели, но речь не об этом.
Для меня всегда было мучительно больно подключаться к серверам с Windows, потому что эти подключения либо настраиваются через одно место (привет WinRM с HTTPS) либо работают не очень стабильно (здравствуй RDP к виртуалкам за океаном).

Поэтому, случайно натолкнувшись на проект Win32-OpenSSH, я решил поделиться опытом настройки. Возможно кому-нибудь эта тулза сэкономить кучу нервов.



Варианты установки:

  1. Вручную
  2. Через пакет Chocolatey
  3. Через Ansible, например роль jborean93.win_openssh

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

Отмечу, что данный проект пока что находится на стадии beta, поэтому его не рекомендуют использовать в production.

Итак, скачиваем последний релиз, на текущий момент это 7.9.0.0p1-beta. Есть версии как для 32 так и для 64 битных систем.

Распаковываем в C:\Program Files\OpenSSH
Обязательный момент для корректной работы: права на запись в этой директории должны быть только у SYSTEM и у админской группы.

Устанавливаем сервисы скриптом install-sshd.ps1 находящимся в этой директории

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

Разрешаем входящие подключения на 22 порт:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Уточнение: апплет New-NetFirewallRule используется на Windows Server 2012 и новее. В наиболее старых системах (либо десктопных) можно воспользоваться командой:
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22 

Запускаем сервис:
net start sshd

При запуске будут автоматически сгенерированы хост-ключи (если отсутствуют) в %programdata%\ssh

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

Set-Service sshd -StartupType Automatic

Так же, можно сменить командную оболочку по умолчанию (после установки, по умолчанию — cmd):
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Уточнение: Необходимо указывать абсолютный путь.

Что дальше?

А дальше настраиваем sshd_config, который расположем в C:\ProgramData\ssh. Например:

PasswordAuthentication no PubkeyAuthentication yes

И создаем в пользовательской папке директорию .ssh, а в ней файл authorized_keys. Туда записываем публичные ключи.

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

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

StrictModes no

К слову, в C:\Program Files\OpenSSH лежат 2 скрипта (FixHostFilePermissions.ps1, FixUserFilePermissions.ps1), которые должны но не обязаны фиксить права, в том числе и с authorized_keys, но почему-то не фиксят.

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

ru-mbp-666:infrastructure$ ssh [email protected] -i ~/.ssh/id_rsa Windows PowerShell Copyright (C) 2016 Microsoft Corporation. All rights reserved. PS C:\Users\Administrator> Get-Host Name : ConsoleHost Version : 5.1.14393.2791 InstanceId : 653210bd-6f58-445e-80a0-66f66666f6f6 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : en-US CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace PS C:\Users\Administrator>

Субъективные плюсы/минусы.

Плюсы:

  • Стандартный подход к подключению к серверам.
    Когда есть немного Windows машин, очень неудобно когда:
    Так, сюда мы ходим по ssh, а тут рдп,
    и вообще best-practice с бастионами, сначала ssh-туннель, а через него RDP.
  • Простота настройки
    Считаю что это очевидно.
  • Скорость подключения и работы с удаленной машиной
    Нет графической оболочки, экономятся как ресурсы сервера, так и количество передаваемых данных.

Минусы:
  • Не заменяет RDP полностью.
    Не все можно сделать из консоли, увы. Я имею ввиду ситуации, когда требуется GUI.

Материалы использованные в статье:
Ссылка на сам проект
Варианты установки бессовестно скопированы с Ansible docs.

Подключение к Windows по SSH с помощью встроенного OpenSSH

Начиная с Windows 10 1809 и Windows Server 2019 в операционной системе имеется встроенный SSH сервер, основанный на OpenSSH. В этой статье мы покажем, как установить и настроить OpenSSH сервер в Windows 10 и подключиться к нему удаленно по защищенному SSH протоколу (ну прям как в Linux 🙂 ).

Установка сервера OpenSSH в Windows

Рассмотрим, как установить компонент OpenSSH Server в Windows 10 1903 (Windows Server 2019 все выполняется аналогично).

Пакет OpenSSH (как и RSAT) уже включен в данные версии Windows в виде Feature on Demand (FoD).

При наличии прямого Интернет-подключения вы можете установить сервер OpenSSH с помощью PowerShell

Add-WindowsCapability -Online -Name OpenSSH.Server*

Или при помощи DISM:

dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

В Windows 10 этот компонент также можно установить через панель Параметры (Приложения -> Управление дополнительными компонентами -> Добавить компонент). Найдите в списке Open SSH Server и нажмите кнопку Install).

Чтобы проверить, что OpenSSH сервер установлен, выполните:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'

State : Installed

Настройка SSH сервера в Windows

После уставной сервера OpenSSH в Windows вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

С помощью nestat убедитесь, что теперь в системе запущен SSH сервер и ждет подключений на 22 порту:

netstat -na| find ":22"

Проверьте, что включено правило брандмауэра (Windows Defender Firewall), разрешающее входящие подключения к Windows по порту TCP/22.

Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled

Name DisplayName Description Enabled
---- ----------- ----------- -------
OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True

Если правило отключено (состоянии Enabled=False) или отсутствует, вы можете создать новое входящее правило командой New-NetFirewallRule:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

По умолчанию важным компоненты OpenSSH хранятся в следующих каталогах:

  • Исполняемые файлы OpenSSH Server: C:\Windows\System32\OpenSSH\
  • Конфигурационный файл sshd_config (создается после первого запуска службы): C:\ProgramData\ssh
  • Журнал OpenSSH: C:\windows\system32\OpenSSH\logs\sshd.log
  • Файл authorized_keys и ключи: %USERPROFILE%\.ssh\

При установке OpenSSH сервера в системе создается новый локальный пользователь sshd.

Sshd_config: Конфигурационный файл сервера OpenSSH

Вы можете изменить настройки сервере OpenSSH в конфигурационном файле %programdata%\ssh\sshd_config.

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

DenyUsers winitpro\[email protected]
DenyUsers corp\*

Чтобы разрешить подключение только для определенной доменной группы:

AllowGroups winitpro\sshadmins

Либо можете разрешить доступ для локальной группы:

AllowGroups sshadmins

Можно запретить вход под учетными записями с правами администратора, в этом случае для выполнения привилегированных действий в SSH сессии нужно делать runas.

DenyGroups Administrators

Следующие директивы разрешают SSH доступ по ключам (доступ к Windows через SSH по ключам рассмотрим подробно в следующей статье) и по паролю:

PubkeyAuthentication yes
PasswordAuthentication yes

Вы можете изменить порт, на котором принимает подключения OpenSSH в конфигурационном файле sshd_config в директиве Port.

После любых изменений в конфигурационном файле sshd_config нужно перезапускать службы sshd:

restart-service sshd

Подключение к Windows 10 через SSH

Теперь вы можете попробовать подключиться к своей Windows 10 через SSH клиент (я использую putty, но можно пользоваться встроенным ssh клиентом Windows).

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

Нажимаем Да, и в открывшееся окне авторизуемся под пользователем Windows.

При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.

[email protected] C:\Users\admin>

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

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

powershell.exe

Чтобы изменить Shell по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр такой командой:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String –Force

Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell (об этом свидетельствует приглашение PS C:\Users\admin>).

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

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

SSH-протокол (англ. Secure Shell ) используется для безопасного удалённого управления операционной системой. По SSH можно подключиться к любому серверу с операционной системой семейства Linux.

Если на вашем сервере установлена ОС Windows Server — используйте подключение по RDP.

Где найти доступы к серверу

Для подключения по SSH потребуется указать IP-адрес, пароль и логин администратора сервера. Эти данные можно найти на почте, привязанной к аккаунту (после активации VDS приходит письмо с инструкцией) или в Личном кабинете — в разделе «Товары» откройте подраздел «Виртуальные серверы» — выберите сервер в списке, сверху «Инструкция».

В новой вкладке откроется страница с необходимой информацией.

Как подключиться по SSH с компьютера на ОС Windows

Если на вашем компьютере установлена ОС Windows, а на сервере — UNIX-подобная система (например, Ubuntu, Debian, CentOS и др.), то для установки SSH-соединения можно использовать PuTTY. Это бесплатная программа под Windows состоит из одного запускаемого файла и не требует установки.

Чтобы установить соединение при помощи PuTTY, необходимо проделать следующие действия:

0. Скачайте нужную версию PuTTY по ссылке
1. Запустите файл putty.exe. Откроется окно программы:

По умолчанию никаких настроек программы менять не нужно. Достаточно убедиться, что указан порт Port 22 и тип соединения Connection type — SSH.

2. В поле Host Name (or IP address) введите IP-адрес сервера. Нажмите кнопку Open.

Может появиться предупреждение системы безопасности PuTTY — оно срабатывает при подключении к новому серверу.  Нажмите Да — и соединение продолжится.

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

4. В следующей строке введите пароль пользователя. При вводе пароля символы в командной строке не отображаются: можно набрать пароль вслепую или вставить кликом правой кнопки мыши, предварительно скопировав (Ctrl+C) его из инструкции. После ввода нажмите клавишу Enter. Если имя пользователя или пароль указаны неправильно, выведется ошибка «Access denied». В случае успешного подключения откроется командная строка виртуального сервера.

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

Подключиться по SSH к виртуальному серверу можно через терминал — в обоих случаях это приложение предустановлено.

В операционных системах семейства Linux (Ubuntu и др.) его можно открыть сочетанием клавиш Ctrl+Alt+T.

В MacOS приложение Терминал можно найти через Spotlight (иконка поиска в правом верхнем углу экрана).

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

 ssh [email protected]_adress 

где вместо username нужно указать логин пользователя, вместо ip-adress — IP-адрес сервера, к которому вы подключаетесь. Если на сервере используется нестандартный порт SSH, команда изменится:

 ssh [email protected]_adress -p 22

где 22 — порт, по которому будет произведено подключение по SSH.

После ввода команды система запросит подтверждение подключения (необходимо ввести yes и нажать Enter) и пароль пользователя. После ввода нажмите клавишу Enter — откроется SSH-соединение:

🐧 3 способа использования SSH в Windows для входа на сервер Linux – Information Security Squad

Что такое SSH?

SSH означает Secure Shell – протокол, который был изобретен в 1995 году для замены небезопасного Telnet (телекоммуникационная сеть).

Теперь системный администратор является основным способом безопасного входа на удаленные серверы Linux через общедоступный Интернет.

Хотя он выглядит и действует так же, как Telnet, все коммуникации по протоколу SSH зашифрованы для предотвращения перехвата пакетов.

Если вы используете компьютер с Linux или Mac, SSH-клиент установлен по умолчанию.

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

ssh [email protected]

Теперь давайте обсудим, как использовать SSH в Windows.

Способ 1. Встроенный SSH-клиент в Windows 10

Группа разработчиков Microsoft PowerShell решила перенести OpenSSH (и клиент, и сервер) на Windows в 2015 году.

Наконец, он появился в Windows 10 Fall Creator Update в 2017 году и по умолчанию включена в обновлении от апреля 2018 года.

Чтобы использовать клиент OpenSSH в Windows 10, просто откройте окно PowerShell или окно командной строки и выполните команду ssh.

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

ssh [email protected].101

cryptoparty – это имя пользователя на моем рабочем столе Ubuntu, а 192.168.0.101 – это частный IP-адрес моего рабочего стола Ubuntu.

При первом подключении к компьютеру с Linux вам будет предложено принять ключ хоста.

Затем введите свой пароль для входа.

После входа в систему вы можете запускать команды Linux для выполнения административных задач.

Чтобы выйти из окна Linux, выполните команду выхода или нажмите Ctrl + D.

Чтобы выйти из окна Linux, выполните команду exit или нажмите Ctrl + D.

Способ 2: использование SSH в подсистеме Windows для Linux

Подсистема Windows для Linux (WSL) позволяет запускать встроенные средства командной строки Linux непосредственно в Windows 10.

Если вы являетесь системным администратором, WSL, вероятно, является излишним просто для использования SSH, поскольку он установит и запустит дистрибутив Linux (без графического интерфейса) на рабочем столе Windows 10.

Kali Linux в подсистеме Windows для Linux

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

Вы можете использовать не только SSH, но и другие инструменты командной строки Linux (Bash, sed, awk и т. д.).

Откройте Microsoft Store и введите WSL в поле поиска. Выберите «Запустить Linux на Windows» и установите дистрибутив Linux по вашему выбору.

Например, я выбрал Ubuntu и нажимаю кнопку Get, чтобы установить ее.

После установки дистрибутива Linux откройте панель управления и выберите «Программы» -> «Включить или отключить функции Windows».

Установите флажок Подсистема Windows для Linux, чтобы включить эту функцию.

(Вам может потребоваться перезагрузить компьютер с Windows, чтобы изменения вступили в силу.)

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

ssh [email protected]

Способ 3: использовать Putty

Putty – известный и самый популярный SSH-клиент в Windows до появления клиента Windows OpenSSH и подсистемы Windows для Linux.

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

Запустите Putty из меню «Пуск». Затем введите IP-адрес или имя хоста окна Linux и нажмите кнопку «Open», чтобы подключиться к этом серверу.

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

См. также:

Завершение

Я надеюсь, что эта статья помогла вам использовать SSH в Windows.

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

 

Памятка пользователям ssh / Хабр

abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

Оглавление:

  • управление ключами
  • копирование файлов через ssh
  • Проброс потоков ввода/вывода
  • Монтирование удалённой FS через ssh
  • Удалённое исполнение кода
  • Алиасы и опции для подключений в .ssh/config
  • Опции по-умолчанию
  • Проброс X-сервера
  • ssh в качестве socks-proxy
  • Проброс портов — прямой и обратный
  • Реверс-сокс-прокси
  • туннелирование L2/L3 трафика
  • Проброс агента авторизации
  • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)


Теория в нескольких словах: ssh может авторизоваться не по паролю, а по ключу. Ключ состоит из открытой и закрытой части. Открытая кладётся в домашний каталог пользователя, «которым» заходят на сервер, закрытая — в домашний каталог пользователя, который идёт на удалённый сервер. Половинки сравниваются (я утрирую) и если всё ок — пускают. Важно: авторизуется не только клиент на сервере, но и сервер по отношению к клиенту (то есть у сервера есть свой собственный ключ). Главной особенностью ключа по сравнению с паролем является то, что его нельзя «украсть», взломав сервер — ключ не передаётся с клиента на сервер, а во время авторизации клиент доказывает серверу, что владеет ключом (та самая криптографическая магия).

Генерация ключа


Свой ключ можно сгенерировать с помощью команды ssh-keygen. Если не задать параметры, то он сохранит всё так, как надо.

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

Сменить пароль на ключ можно с помощью команды ssh-keygen -p.

Структура ключа


(если на вопрос про расположение ответили по-умолчанию).
~/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ.
~/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать. Если вы в письмо/чат скопипастите его вместо pub, то нужно генерировать новый ключ. (Я не шучу, примерно 10% людей, которых просишь дать ssh-ключ постят id_rsa, причём из этих десяти процентов мужского пола 100%).

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


В каталоге пользователя, под которым вы хотите зайти, если создать файл ~/.ssh/authorized_keys и положить туда открытый ключ, то можно будет заходить без пароля. Обратите внимание, права на файл не должны давать возможность писать в этот файл посторонним пользователям, иначе ssh его не примет. В ключе последнее поле — [email protected] Оно не имеет никакого отношения к авторизации и служит только для удобства определения где чей ключ. Заметим, это поле может быть поменяно (или даже удалено) без нарушения структуры ключа.

Если вы знаете пароль пользователя, то процесс можно упростить. Команда ssh-copy-id [email protected] позволяет скопировать ключ не редактируя файлы вручную.

Замечание: Старые руководства по ssh упоминают про authorized_keys2. Причина: была первая версия ssh, потом стала вторая (текущая), для неё сделали свой набор конфигов, всех это очень утомило, и вторая версия уже давным давно переключилась на версии без всяких «2». То есть всегда authorized_keys и не думать о разных версиях.

Если у вас ssh на нестандартном порту, то ssh-copy-id требует особого ухищрения при работе: ssh-copy-id '-p 443 [email protected]' (внимание на кавычки).

Ключ сервера


Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts. Узнать, где какой ключ нельзя (ибо несекьюрно).

Если ключ сервера поменялся (например, сервер переустановили), ssh вопит от подделке ключа. Обратите внимание, если сервер не трогали, а ssh вопит, значит вы не на тот сервер ломитесь (например, в сети появился ещё один компьютер с тем же IP, особо этим страдают всякие локальные сети с 192.168.1.1, которых в мире несколько миллионов). Сценарий «злобной man in the middle атаки» маловероятен, чаще просто ошибка с IP, хотя если «всё хорошо», а ключ поменялся — это повод поднять уровень паранойи на пару уровней (а если у вас авторизация по ключу, а сервер вдруг запросил пароль — то паранойю можно включать на 100% и пароль не вводить).

Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1.

Ключ сервера хранится в /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_rsa_key.pub. Их можно:
а) скопировать со старого сервера на новый.
б) сгенерировать с помощью ssh-keygen. Пароля при этом задавать не надо (т.е. пустой). Ключ с паролем ssh-сервер использовать не сможет.

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

Старые ключи из know_hosts при этом лучше убрать, иначе ssh будет ругаться на duplicate key.




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

scp path/myfile [email protected]:/full/path/to/new/location/

Обратно тоже можно:
scp [email protected]:/full/path/to/file /path/to/put/here

Fish warning: Не смотря на то, что mc умеет делать соединение по ssh, копировать большие файлы будет очень мучительно, т.к. fish (модуль mc для работы с ssh как с виртуальной fs) работает очень медленно. 100-200кб — предел, дальше начинается испытание терпения. (Я вспомнил свою очень раннюю молодость, когда не зная про scp, я копировал ~5Гб через fish в mc, заняло это чуть больше 12 часов на FastEthernet).

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

Так тоже можно:


Теория: модуль fuse позволяет «экспортировать» запросы к файловой системе из ядра обратно в userspace к соответствующей программе. Это позволяет легко реализовывать «псевдофайловые системы». Например, мы можем предоставить доступ к удалённой файловой системе через ssh так, что все локальные приложения (за малым исключением) не будут ничего подозревать.

Собственно, исключение: O_DIRECT не поддерживается, увы (это проблема не sshfs, это проблема fuse вообще).

Использование: установить пакет sshfs (сам притащит за собой fuse).

Собственно, пример моего скрипта, который монтирует desunote.ru (размещающийся у меня на домашнем комьютере — с него в этой статье показываются картинки) на мой ноут:

 #!/bin/bash sshfs desunote.ru:/var/www/desunote.ru/ /media/desunote.ru -o reconnect 

Делаем файл +x, вызываем, идём в любое приложение, говорим сохранить и видим:

Параметры sshfs, которые могут оказаться важными: -o reconnect (говорит пытаться пересоединиться вместо ошибок).

Если вы много работаете с данными от рута, то можно (нужно) сделать idmap:

-o idmap=user. Работает она следующим образом: если мы коннектимся как пользователь [email protected], а локально работаем как пользователь vasiliy, то мы говорим «считать, что файлы pupkin, это файлы vasiliy». ну или «root», если мы коннектимся как root.

В моём случае idmap не нужен, так как имена пользователей (локальное и удалённое) совпадают.

Заметим, комфортно работать получается только если у нас есть ssh-ключик (см. начало статьи), если нет — авторизация по паролю выбешивает на 2-3 подключение.

Отключить обратно можно командой fusermount -u /path, однако, если соединение залипло (например, нет сети), то можно/нужно делать это из-под рута: sudo umount -f /path.




ssh может выполнить команду на удалённом сервере и тут же закрыть соединение. Простейший пример:

ssh [email protected] ls /etc/

Выведет нам содержимое /etc/ на server, при этом у нас будет локальная командная строка.

Некоторые приложения хотят иметь управляющий терминал. Их следует запускать с опцией -t:
ssh [email protected] -t remove_command

Кстати, мы можем сделать что-то такого вида:
ssh [email protected] cat /some/file|awk '{print $2}' |local_app

Это нас приводит следующей фиче:

Проброс stdin/out


Допустим, мы хотим сделать запрос к программе удалённо, а потом её вывод поместить в локальный файл

ssh [email protected] command >my_file

Допустим, мы хотим локальный вывод положить удалённо

mycommand |scp — [email protected]:/path/remote_file

Усложним пример — мы можем прокидывать файлы с сервера на сервер: Делаем цепочку, чтобы положить stdin на 10.1.1.2, который нам не доступен снаружи:

mycommand | ssh [email protected] «scp — [email protected]:/path/to/file»

Есть и вот такой головоломный приём использования pipe'а (любезно подсказали в комментариях в жж):

tar -c * | ssh [email protected] "cd && tar -x"

Tar запаковывает файлы по маске локально, пишет их в stdout, откуда их читает ssh, передаёт в stdin на удалённом сервере, где их cd игнорирует (не читает stdin), а tar — читает и распаковывает. Так сказать, scp для бедных.


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

В более-менее крупной компании часто оказывается, что имена серверов выглядят так: spb-MX-i3.extrt.int.company.net. И пользователь там не равен локальному. То есть логиниться надо так: ssh [email protected] Каждый раз печатать — туннельных синдромов не напасёшься. В малых компаниях проблема обратная — никто не думает о DNS, и обращение на сервер выглядит так: ssh [email protected] Короче, но всё равно напрягает. Ещё большая драма, если у нас есть нестандартный порт, и, например, первая версия ssh (привет цискам). Тогда всё выглядит так: ssh -1 -p 334 [email protected] Удавиться. Про драму с scp даже рассказывать не хочется.

Можно прописать общесистемные alias'ы на IP (/etc/hosts), но это кривоватый выход (и пользователя и опции всё равно печатать). Есть путь короче.

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

 Host ric Hostname ооо-рога-и-копыта.рф User Администратор ForwardX11 yes Compression yes Host home Hostname myhome.dyndns.org User vasya PasswordAuthentication no 

Все доступные для использования опции можно увидеть в man ssh_config (не путать с sshd_config).




По подсказке UUSER: вы можете указать настройки соединения по умолчанию с помощью конструкции Host *, т.е., например:
 Host * User root Compression yes 

То же самое можно сделать и в /etc/ssh/ssh_config (не путать с /etc/ssh/sshd_config), но это требует прав рута и распространяется на всех пользователей.



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

Теория: Графические приложения в юникс обычно используют X-сервер (wayland в пути, но всё ещё не готов). Это означает, что приложение запускается и подключается к X-серверу для рисования. Иными словами, если у вас есть голый сервер без гуя и есть локальный x-сервер (в котором вы работаете), то вы можете дать возможность приложениям с сервера рисовать у вас на рабочем столе. Обычно подключение к удалённом X-серверу — не самая безопасная и тривиальная вещь. SSH позволяет упростить этот процесс и сделать его совсем безопасным. А возможность жать трафик позволяет ещё и обойтись меньшим трафиком (т.е. уменьшить утилизацию канала, то есть уменьшить ping (точнее, latency), то есть уменьшить лаги).

Ключики: -X — проброс X-сервера. -Y проброс авторизации.

Достаточно просто запомнить комбинацию ssh -XYC [email protected]
В примере выше (названия компании вымышленные) я подключаюсь к серверу ооо-рога-и-копыта.рф не просто так, а с целью получить доступ к windows-серверу. Безопасность microsoft при работе в сети мы все хорошо знаем, так что выставлять наружу голый RDP неуютно. Вместо этого мы подключаемся к серверу по ssh, а дальше запускаем там команду rdesktop:
ssh ric
rdesktop -k en-us 192.168.1.1 -g 1900x1200

и чудо, окошко логина в windows на нашем рабочем столе. Заметим, тщательно зашифрованное и неотличимое от обычного ssh-трафика.




Когда я оказываюсь в очередной гостинице (кафе, конференции), то местный wifi чаще всего оказывается ужасным — закрытые порты, неизвестно какой уровень безопасности. Да и доверия к чужим точкам доступа не особо много (это не паранойя, я вполне наблюдал как уводят пароли и куки с помощью банального ноутбука, раздающего 3G всем желающим с названием близлежащей кафешки (и пишущего интересное в процессе)).

Особые проблемы доставляют закрытые порты. То джаббер прикроют, то IMAP, то ещё что-нибудь.

Обычный VPN (pptp, l2tp, openvpn) в таких ситуациях не работает — его просто не пропускают. Экспериментально известно, что 443ий порт чаще всего оставляют, причём в режиме CONNECT, то есть пропускают «как есть» (обычный http могут ещё прозрачно на сквид завернуть).

Решением служит socks-proxy режим работы ssh. Его принцип: ssh-клиент подключается к серверу и слушает локально. Получив запрос, он отправляет его (через открытое соединение) на сервер, сервер устанавливает соединение согласно запросу и все данные передаёт обратно ssh-клиенту. А тот отвечает обратившемуся. Для работы нужно сказать приложениям «использовать socks-proxy». И указать IP-адрес прокси. В случае с ssh это чаще всего localhost (так вы не отдадите свой канал чужим людям).

Подключение в режиме sock-proxy выглядит так:

 ssh -D 8080 [email protected] 

В силу того, что чужие wifi чаще всего не только фиговые, но и лагливые, то бывает неплохо включить опцию -C (сжимать трафик). Получается почти что opera turbo (только картинки не жмёт). В реальном сёрфинге по http жмёт примерно в 2-3 раза (читай — если вам выпало несчастье в 64кбит, то вы будете мегабайтные страницы открывать не по две минуты, а секунд за 40. Фигово, но всё ж лучше). Но главное: никаких украденных кук и подслушанных сессий.

Я не зря сказал про закрытые порты. 22ой порт закрывают ровно так же, как «не нужный» порт джаббера. Решение — повесить сервер на 443-й порт. Снимать с 22 не стоит, иногда бывают системы с DPI (deep packet inspection), которые ваш «псевдо-ssl» не пустят.

Вот так выглядит мой конфиг:

/etc/ssh/sshd_config:
(фрагмент)
Port 22
Port 443

А вот кусок ~/.ssh/config с ноутбука, который описывает vpn

 Host vpn Hostname desunote.ru User vasya Compression yes DynamicForward 127.1:8080 Port 443 

(обратите внимание на «ленивую» форму записи localhost — 127.1, это вполне себе законный метод написать 127.0.0.1)




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

Для понимания ситуации все примеры ниже будут ссылаться на вот эту схему:

Комментарии: Две серые сети. Первая сеть напоминает типичную офисную сеть (NAT), вторая — «гейтвей», то есть сервер с белым интерфейсом и серым, смотрящим в свою собственную приватную сеть. В дальнейших рассуждениях мы полагаем, что «наш» ноутбук — А, а «сервер» — Б.

Задача: у нас локально запущено приложение, нам нужно дать возможность другому пользователю (за пределами нашей сети) посмотреть на него.

Решение: проброс локального порта (127.0.0.1:80) на публично доступный адрес. Допустим, наш «публично доступный» Б занял 80ый порт чем-то полезным, так что пробрасывать мы будем на нестандартный порт (8080).

Итоговая конфигурация: запросы на 8.8.8.8:8080 будут попадать на localhost ноутбука А.

ssh -R 127.1:80:8.8.8.8:8080 [email protected]

Опция -R позволяет перенаправлять с удалённого (Remote) сервера порт на свой (локальный).
Важно: если мы хотим использовать адрес 8.8.8.8, то нам нужно разрешить GatewayPorts в настройках сервера Б.
Задача. На сервере «Б» слушает некий демон (допустим, sql-сервер). Наше приложение не совместимо с сервером (другая битность, ОС, злой админ, запрещающий и накладывающий лимиты и т.д.). Мы хотим локально получить доступ к удалённому localhost'у.

Итоговая конфигурация: запросы на localhost:3333 на 'A' должны обслуживаться демоном на localhost:3128 'Б'.

ssh -L 127.1:3333:127.1:3128 [email protected]

Опция -L позволяет локальные обращения (Local) направлять на удалённый сервер.

Задача: На сервере «Б» на сером интерфейсе слушает некий сервис и мы хотим дать возможность коллеге (192.168.0.3) посмотреть на это приложение.

Итоговая конфигурация: запросы на наш серый IP-адрес (192.168.0.2) попадают на серый интерфейс сервера Б.

ssh -L 192.168.0.2:8080:10.1.1.1:80 [email protected]

Вложенные туннели


Разумеется, туннели можно перенаправлять.

Усложним задачу: теперь нам хочется показать коллеге приложение, запущенное на localhost на сервере с адресом 10.1.1.2 (на 80ом порту).

Решение сложно:
ssh -L 192.168.0.2:8080:127.1:9999 [email protected] ssh -L 127.1:9999:127.1:80 [email protected]

Что происходит? Мы говорим ssh перенаправлять локальные запросы с нашего адреса на localhost сервера Б и сразу после подключения запустить ssh (то есть клиента ssh) на сервере Б с опцией слушать на localhost и передавать запросы на сервер 10.1.1.2 (куда клиент и должен подключиться). Порт 9999 выбран произвольно, главное, чтобы совпадал в первом вызове и во втором.

Реверс-сокс-прокси

Если предыдущий пример вам показался простым и очевидным, то попробуйте догадаться, что сделает этот пример:
ssh -D 8080 -R 127.1:8080:127.1:8080 [email protected] ssh -R 127.1:8080:127.1:8080 [email protected]

Если вы офицер безопасности, задача которого запретить использование интернета на сервере 10.1.1.2, то можете начинать выдёргивать волосы на попе, ибо эта команда организует доступ в интернет для сервера 10.1.1.2 посредством сокс-прокси, запущенного на компьютере «А». Трафик полностью зашифрован и неотличим от любого другого трафика SSH. А исходящий трафик с компьютера с точки зрения сети «192.168.0/24» не отличим от обычного трафика компьютера А.




Если к этому моменту попа отдела безопасности не сияет лысиной, а ssh всё ещё не внесён в список врагов безопасности номер один, вот вам окончательный убийца всего и вся: туннелирование IP или даже ethernet. В самых радикальных случаях это позволяет туннелировать dhcp, заниматься удалённым arp-спуфингом, делать wake up on lan и прочие безобразия второго уровня.

Подробнее описано тут: www.khanh.net/blog/archives/51-using-openSSH-as-a-layer-2-ethernet-bridge-VPN.html

(сам я увы, таким не пользовался).

Легко понять, что в таких условиях невозможно никаким DPI (deep packet inspection) отловить подобные туннели — либо ssh разрешён (читай — делай что хочешь), либо ssh запрещён (и можно смело из такой компании идиотов увольняться не ощущая ни малейшего сожаления).


Если вы думаете, что на этом всё, то…… впрочем, в отличие от автора, у которого «снизу» ещё не написано, читатель заранее видит, что там снизу много букв и интриги не получается.

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

Для начала о простом пробросе авторизации.

Повторю картинку:

Допустим, мы хотим подключиться к серверу 10.1.1.2, который готов принять наш ключ. Но копировать его на 8.8.8.8 мы не хотим, ибо там проходной двор и половина людей имеет sudo и может шариться по чужим каталогам. Компромиссным вариантом было бы иметь «другой» ssh-ключ, который бы авторизовывал [email protected] на 10.1.1.2, но если мы не хотим пускать кого попало с 8.8.8.8 на 10.1.1.2, то это не вариант (тем паче, что ключ могут не только поюзать, но и скопировать себе «на чёрный день»).

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

Вызов выглядит так:

ssh -A [email protected] ssh [email protected]

Удалённый ssh-клиент (на 8.8.8.8) может доказать 10.1.1.2, что мы это мы только если мы к этому серверу подключены и дали ssh-клиенту доступ к своему агенту авторизации (но не ключу!).

В большинстве случаев это прокатывает.

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

Есть ещё более могучий метод — он превращает ssh в простой pipe (в смысле, «трубу») через которую насквозь мы осуществляем работу с удалённым сервером.

Главным достоинством этого метода является полная независимость от доверенности промежуточного сервера. Он может использовать поддельный ssh-сервер, логгировать все байты и все действия, перехватывать любые данные и подделывать их как хочет — взаимодействие идёт между «итоговым» сервером и клиентом. Если данные оконечного сервера подделаны, то подпись не сойдётся. Если данные не подделаны, то сессия устанавливается в защищённом режиме, так что перехватывать нечего.

Эту клёвую настройку я не знал, и раскопал её redrampage.

Настройка завязана на две возможности ssh: опцию -W (превращающую ssh в «трубу») и опцию конфига ProxyCommand (опции командной строки, вроде бы нет), которая говорит «запустить программу и присосаться к её stdin/out». Опции эти появились недавно, так что пользователи centos в пролёте.

Выглядит это так (циферки для картинки выше):

.ssh/config:

 Host raep HostName 10.1.1.2 User user2 ProxyCommand ssh -W %h:%p [email protected] 

Ну а подключение тривиально: ssh raep.

Повторю важную мысль: сервер 8.8.8.8 не может перехватить или подделать трафик, воспользоваться агентом авторизации пользователя или иным образом изменить трафик. Запретить — да, может. Но если разрешил — пропустит через себя без расшифровки или модификации. Для работы конфигурации нужно иметь свой открытый ключ в authorized_keys как для [email protected], так и в [email protected]

Разумеется, подключение можно оснащать всеми прочими фенечками — прокидыванием портов, копированием файлов, сокс-прокси, L2-туннелями, туннелированием X-сервера и т.д.


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

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

× Содержание

× Поделиться этим учебником

Куда бы вы хотели этим поделиться?

  • Twitter
  • Reddit
  • Хакерские новости
  • Facebook

Поделиться ссылкой

Ссылка на руководство

× Поделиться этим учебником

Куда бы вы хотели этим поделиться?

.

Подключиться к Windows через SSH как в Linux / Habr

Больше всего меня удручает подключение к хостам Windows. Я не противник и не фанат Microsoft и их продуктов. У каждого продукта свое предназначение. Но мне действительно больно подключаться к серверам Windows из-за двух моментов: его сложно настроить (привет WinRM с HTTPS), и он действительно нестабилен (привет RDP виртуальным машинам через океан).

К счастью, я нашел проект Win32-OpenSSH. Я понял, что хочу поделиться с ней своим опытом.Я верю, что это кому-то поможет и сэкономит много нервов.



Способы установки:

  1. Вручную
  2. Виа Шоколадный пакет
  3. Через Ansible, скажем, роль jborean93.win_openssh

Я объясню ручной способ, потому что другие очевидны.

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

Ну что ж, качаем последний релиз. Сейчас это 7.9.0.0p1-beta. Также есть 32- и 64-битные версии.

Затем распакуйте его в C: \ Program Files \ OpenSSH .

Важно: необходимо предоставить доступ на запись только для SYSTEM и группы Administers.

Далее установите службы через сценарий оболочки install-sshd.ps1 , который находится в каталоге OpenSSH

  powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1  

Разрешим входящие соединения на 22 порт:
  New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22  

Примечание: апплет New-NetFirewallRule предназначен только для Windows Server 2012 и выше.Для более старых или настольных ОС вы можете использовать следующую команду:
  netsh advfirewall firewall добавить имя правила = sshd dir = in action = allow protocol = TCP localport = 22  

Запустить службу:
  net start sshd  

Это автоматически сгенерирует ключи хоста под % programdata% \ ssh , если они еще не существуют.

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

  Set-Service sshd -StartupType Automatic  

Кроме того, вы можете изменить оболочку по умолчанию (это cmd по умолчанию после установки):
  New-ItemProperty -Path "HKLM: \ SOFTWARE \ OpenSSH" -Name DefaultShell -Value "C: \ Windows \ System32 \ WindowsPowerShell \ v1 .0 \ powershell.exe "-PropertyType String -Force  

Примечание: вы должны определить абсолютный путь.

Что дальше?

Мы можем настроить sshd_config , который находится в C: \ ProgramData \ ssh .
Например:

  Пароль Нет аутентификации PubkeyAuthentication да  

Затем мы создаем каталог .ssh внутри каталога пользователя ( C: \ Users \ ) и файл authorized_keys внутри него.Мы можем вставить открытые ключи в этот файл.
Важно: единственный пользователь, в котором он находится, должен иметь права на запись в этот файл.
Кстати, если вы не можете это исправить, вы можете отключить проверку разрешений через config:
  StrictModes no  

Кроме того, каталог C: \ Program Files \ OpenSSH содержит 2 сценария ( FixHostFilePermissions.ps1 , FixUserFilePermissions.ps1 ), которые должны , но не обязаны исправлять разрешения , включая разрешения authorized_keys , но они не .

Не забудьте перезапустить службу sshd , чтобы изменения вступили в силу.

  ru-mbp-666: инфраструктура $ ssh [email protected] -i ~ / .ssh / id_rsa Windows PowerShell Авторское право (C) Корпорация Майкрософт, 2016. Все права защищены. PS C: \ Пользователи \ Администратор> Get-Host Имя: ConsoleHost Версия: 5.1.14393.2791 InstanceId: 653210bd-6f58-445e-80a0-66f66666f6f6 Пользовательский интерфейс: System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture: en-US CurrentUICulture: en-US PrivateData: Microsoft.PowerShell.ConsoleHost + ConsoleColorProxy DebuggerEnabled: True IsRunspacePushing: Ложь Область выполнения: System.Management.Automation.Runspaces.LocalRunspace PS C: \ Пользователи \ Администратор>  

Личные плюсы / минусы.

Плюсы:

  • Стандартный способ подключения к любому серверу (Windows / Linux)
    Когда у вас несколько хостов Windows, это неудобно:
    Итак, здесь мы идем через ssh, а здесь через RDP,
    Вообще говоря, это лучшая практика с бастионами, сначала ssh-tunnel, затем RDP через туннель.О, убей меня, детка, еще раз.
  • Простота настройки
    Думаю, это очевидно.
  • Скорость подключения к удаленному хосту
    Без GUI мы экономим ресурсы хоста и размер передаваемых данных

Минусы:
  • В некоторых случаях он не может заменить RDP.
    Не все, что можно делать с помощью PowerShell. Я имею в виду те случаи, когда требуется GUI.

Ссылки:

Project на Github
Ansible docs

.

Использование ключей SSH для подключения к виртуальным машинам Linux - Виртуальные машины Azure

  • 4 минуты на чтение

В этой статье

Эта статья предназначена для пользователей Windows, которые хотят создать и использовать ключи безопасной оболочки (SSH) для подключения к виртуальным машинам (ВМ) Linux в Azure. Вы также можете создавать и хранить ключи SSH на портале Azure, чтобы использовать их при создании виртуальных машин на портале.

Чтобы использовать ключи SSH из клиента Linux или macOS, см. Быстрые шаги. Более подробный обзор SSH см. В разделе Подробные действия: создание ключей SSH для аутентификации на виртуальной машине Linux в Azure и управление ими.

Обзор SSH и ключей

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

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

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

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

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

Поддерживаемые форматы ключей SSH

Azure в настоящее время поддерживает пары открытых и закрытых ключей RSA по протоколу SSH 2 (SSH-2) с минимальной длиной 2048 бит.Другие ключевые форматы, такие как ED25519 и ECDSA, не поддерживаются.

SSH-клиенты

Последние версии Windows 10 включают клиентские команды OpenSSH для создания и использования ключей SSH и установления SSH-подключений из PowerShell или командной строки. Это самый простой способ создать SSH-соединение с вашей виртуальной машиной Linux с компьютера Windows.

Вы также можете использовать Bash в Azure Cloud Shell для подключения к виртуальной машине. Вы можете использовать Cloud Shell в веб-браузере, на портале Azure или в качестве терминала в Visual Studio Code с помощью расширения учетной записи Azure.

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

Создать пару ключей SSH

Создайте пару ключей SSH с помощью команды ssh-keygen . Введите имя файла или используйте значение по умолчанию, указанное в скобках (например, C: \ Users \ username / .ssh / id_rsa ). Введите кодовую фразу для файла или оставьте кодовую фразу пустой, если вы не хотите использовать кодовую фразу.

  ssh-keygen -m PEM -t rsa -b 4096  

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

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

Используя Azure CLI, вы указываете путь и имя файла для открытого ключа, используя az vm create и параметр --ssh-key-value .

  az vm create \ --resource-group myResourceGroup \ --name myVM \ --image UbuntuLTS \ --admin-username azureuser \ --ssh-ключ-значение ~ / .ssh / id_rsa.pub  

В PowerShell используйте New-AzVM и добавьте ключ SSH в конфигурацию виртуальной машины с помощью`. Пример см. В разделе Краткое руководство: создание виртуальной машины Linux в Azure с помощью PowerShell.

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

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

С открытым ключом, развернутым на вашей виртуальной машине Azure, и закрытым ключом в вашей локальной системе, подключитесь по SSH к вашей виртуальной машине, используя IP-адрес или DNS-имя вашей виртуальной машины. Замените azureuser и 10.111.12.123 в следующей команде на имя пользователя администратора, IP-адрес (или полное доменное имя) и путь к вашему закрытому ключу:

  ssh -i ~ /.ssh / id_rsa.pub [email protected]  

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

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

Следующие шаги

.

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

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

Знакомство с Linux

Недавно я взялся научиться разрабатывать на платформе Linux. Я вырос в мире Windows и решил, что пора расширить свой кругозор.В конце концов, большая часть Интернета работает на том или ином варианте Linux, и некоторые из наиболее востребованных сегодня разработок веб-приложений происходят в Ruby on Rails, который лучше всего подходит для Linux-машины.

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

Одна из самых первых вещей, которую я хотел сделать, это узнать, как получить удаленный доступ к системе Linux с рабочего стола Windows.Первым шагом в этом процессе было понимание того, как установить соединение Secure Shell (SSH). Поначалу может показаться, что это немного избыточно, поскольку моя Linux-машина находится примерно в 9 футах от моего модуля разработки Windows. Тем не менее, это необходимый первый шаг, чтобы в конечном итоге иметь возможность:

  • Разверните экземпляр виртуальной машины Linux в IAAS / облачном сервисе, таком как Amazon EC2 и / или Windows Azure, и управляйте им / получайте доступ / используйте его с моего рабочего стола Windows.
  • Настройка и управление размещенным сервером Linux для развертывания веб-приложений / сайтов
  • Понимание удаленного доступа в среде Linux

Конечно, помимо этих пунктов в списке выше, это также было хорошим упражнением для получения я начал делать полезные вещи с моей новой Linux-машиной!

Требуется незначительное знакомство с Linux

Нам нужно будет выполнить некоторые команды Linux через интерфейс командной строки (CLI) Bash как на нашей машине Linux, так и через удаленное соединение, как только мы его настроим.Если, как и я, вы новичок в Linux, возможно, вы захотите ознакомиться с некоторыми основами Bash. В то время как сообщения, ссылки на которые приведены ниже, являются частью серии статей об использовании системы управления версиями Git, каждая из следующих статей посвящена основным командам Bash, используемым для навигации и управления файлами в системе Linux.

Обзор базовой навигации Bash:

Настройка Linux-машины

Я использую Linux Mint для своих первых набегов в мир Linux. Mint построен на Ubuntu и имеет дружественный графический интерфейс для тех, кто только начинает.Однако для меня графический интерфейс в основном предназначен для тех моментов, «ох черт, я не знаю, что делать». Одна из моих основных целей при настройке этой машины состояла в том, чтобы максимально использовать терминал Bash и освоить этот аспект этой новой платформы. Фактически, мы собираемся выполнить все это упражнение, используя терминал Bash при взаимодействии с Linux.

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

Установка OpenSSH на Linux

Недавно установив свежую ОС Mint, первое, что нам нужно сделать, это установить SSH-сервер. Ваш дистрибутив Linux может поставляться или не поставляться с предварительно настроенным OpenSSH, который, как я понимаю, является предпочтительным SSH-сервером в стране Linux.

Дистрибутив Linux

на основе Linux с добавлением Debian использует apt-get install newSotwareTitle для поиска и загрузки пакетов программного обеспечения и / или подтверждения и обновления существующих установок, если они уже установлены на вашем компьютере.Итак, давайте воспользуемся apt-get для загрузки OpenSSH на нашу Linux-машину (, примечание - в этом сообщении предполагается, что у вас есть права суперпользователя / администратора на вашем Linux-компьютере):

Установить OpenSSH

Откройте терминал Bash на вашем компьютере с Linux, введите следующую команду и нажмите Enter. Поскольку вы используете sudo для выполнения этого действия, будьте готовы ввести свой пароль перед выполнением:

Установить OpenSSH Server
 $ sudo apt-get install openssh-server 

В моем случае OpenSSH уже присутствовал в системе, поэтому мой вывод терминала выглядит так:

Если на вашем компьютере не установлен OpenSSH Server, терминал запросит у вас подтверждение установки / обновления любого количества пакетов.Введите «Y» и нажмите Enter. После этого вы увидите, что окно терминала заполнится предпринятыми действиями и добавленными пакетами.

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

Самый распространенный клиент SSH для Windows - PuTTY (нет, это не опечатка)

Использование протокола SSH менее распространено во вселенной Windows, чем в Linux.Однако наиболее популярным клиентом SSH для использования на компьютере с Windows является PuTTY, эмулятор терминала с открытым исходным кодом, который может выступать в качестве клиента для SSH, Telnet и других протоколов. Чтобы приступить к настройке клиента SSH в Windows, посетите страницу загрузки PuTTY, загрузите и установите putty на свой компьютер. Самый простой способ - загрузить пакет putty-0.62-installer.exe , который включает все необходимое для наших целей:

После завершения загрузки запустите установщик.

Используйте PuTTYGen для создания пары открытого / закрытого ключей для клиентской машины Windows

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

SSH использует криптографию с открытым ключом для аутентификации удаленного компьютера и позволяет ему при необходимости аутентифицировать пользователя. [1] Кто угодно может создать совпадающую пару разных ключей (открытый и закрытый). Открытый ключ размещается на всех компьютерах, которые должны разрешить доступ владельцу соответствующего закрытого ключа (владелец хранит закрытый ключ в секрете).Хотя аутентификация основана на закрытом ключе, сам ключ никогда не передается по сети во время аутентификации.

[Подробнее]

Для наших целей мы будем использовать утилиту Handy PuTTYGen, установленную с нашим пакетом PuTTY, для создания наших ключей. Откройте PuTTYGen (меню «Пуск» -> PuTTY (папка) -> PuTTYGen (приложение)), и вы должны увидеть следующее:

PuTTYGen, готов к созданию пары открытого / закрытого ключей:

Оставьте настройки по умолчанию и нажмите кнопку «Создать».PuTTYGen запросит, чтобы вы переместили курсор в большую пустую область, чтобы добавить в процесс некоторую «случайность» (и фактически приостановит генерацию, пока вы не сделаете это):

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

Заполните следующие пункты Формы генератора следующим образом:

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

После того, как вы закончите эти пункты, пора сохранить ключи. Во-первых, я бы создал в вашей пользовательской папке Windows каталог (папку) с именем «SSH-ключи», в котором будут храниться ваши личные ключи. Затем нажмите кнопку «Сохранить закрытый ключ» и сохраните ключ там.

ПРИМЕЧАНИЕ : Не используйте функцию «Сохранить открытый ключ». OpenSSH ожидает, что открытый ключ будет в формате, немного отличном от формата PuTTYGen, поэтому вместо этого мы скопируем ключ, представленный в окне PuTTYGen, прямо в наш файл authorized_keys после входа в систему с Linux.

ТАКЖЕ ПРИМЕЧАНИЕ : Нет необходимости сохранять открытый ключ, который соответствует только что созданному закрытому ключу, потому что мы можем использовать кнопку PuTTYGen «Загрузить» для загрузки нашего закрытого ключа, который затем также загрузит правильный открытый ключ. данные обратно в окно открытого ключа для повторного копирования.

Оставьте окно PuTTYGen открытым и давайте настроим PuTTY для нашего первого входа в систему.

Настроить PuTTY для первоначального входа в систему

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

Откройте приложение PuTTY (Пуск -> PuTTY (папка) -> PuTTY (приложение))

Введите IP-адрес вашей Linux-машины:

Как вы можете видеть на картинке выше, введите IP-адрес серверной машины (вашего Linux-сервера). Если вы не знаете IP-адрес вашего компьютера Linux , перейдите по этой ссылке:

Оставьте в спецификации порта значение по умолчанию 22 (это стандартный порт, используемый для входа по SSH).Хотя есть потенциальные причины для безопасности, чтобы изменить это позже, сейчас это подойдет.

Затем в древовидном меню слева выберите узел Подключение / Данные и введите свое имя пользователя, которое вы используете для входа в систему Linux (НАПОМИНАНИЕ - мы предполагаем, что ваш профиль пользователя включает права суперпользователя):

Введите свое имя пользователя в форме узла подключения / данных:

Оставьте для остальных настроек значения по умолчанию (как показано выше). Теперь вернитесь к узлу Session и введите имя для этой конфигурации в поле «Saved Sessions», затем нажмите «Save».В моем случае я сохранил эту конфигурацию сеанса, используя IP-адрес и краткое описание конфигурации:

Первый удаленный вход на компьютер Linux с аутентификацией по паролю

Хорошо, с учетом этих подробностей, нажмите кнопку «Открыть». В этот первый раз, когда мы войдем в систему, вам, скорее всего, будет представлено диалоговое окно с предупреждением о том, что для сервера, к которому вы пытаетесь подключиться, нет кешированных ключей, и хотите ли вы кэшировать их сейчас:

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

Затем введите пароль, который вы используете для входа в систему с Linux, и нажмите Enter (обратите внимание, что здесь в терминале курсор не перемещается, и не используются стандартные запутанные заполнители пароля - другими словами, когда вы вводите пароль, будет казаться, что ничего не происходит). Теперь ваш терминал должен выглядеть так:

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

Добавьте свой открытый ключ к машине Linux

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

Если вы не знакомы с навигацией и базовыми операциями с файлами в Bash (терминал Linux), просмотрите эти две статьи, которые я написал.Эти статьи являются частью серии об использовании Git, но эти две посвящены основным командам оболочки Bash, полезным для навигации по файлам и каталогам:

Во-первых, давайте попытаемся перейти в каталог .ssh на нашем удаленном компьютере с Linux. Введите в окно терминала следующее (примечание - символ « $ » не набран - это команда « подсказка » и указывает, что терминал готов к вводу команды):

 $ cd .ssh 

Если каталог с именем еще не существует.ssh в папке пользователя, окно терминала должно выглядеть так:

В этом случае нам нужно создать новый каталог .ssh . Введите следующее:

 $ mkdir .ssh 

Теперь ваш терминал должен выглядеть так:

Теперь попробуем перейти в новый каталог:

Вот это больше похоже! Затем, поскольку изначально не было каталога .ssh , нам также необходимо создать наш файл авторизованных ключей.Мы собираемся создать новый файл и одним махом добавить наш новый открытый ключ. Перейдите в окно PuTTYGen (все еще открытое на рабочем столе Windows), выберите и скопируйте весь открытый ключ, отображаемый в области с меткой «Открытый ключ для вставки в файл OpenSSH authorized_keys »:

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

 echo YourPublicKey >> authorized_keys 

Эта команда добавит YourPublicKey к файлу authorized_keys .Если файл не существует, он будет создан (нашего еще не существует. Если ваш ЕСТЬ, не делайте этого таким образом).

Сначала введите команду echo в удаленный терминал Linux следующим образом:

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

Затем добавьте >> authorized_keys в конец и нажмите клавишу Enter:

Теперь, когда мы добавили наш открытый ключ к машине Linux, давайте закончим нашу сессию PuTTY и посмотрим, сможем ли мы снова войти в систему, используя аутентификацию с открытым / закрытым ключом.Если это сработает, мы изменим конфигурацию нашего сервера OpenSSH в системе Linux, чтобы разрешить ТОЛЬКО этот тип авторизации. Вернитесь к окну Putty и закройте его. Это завершит сеанс.

Настроить PuTTY для авторизации открытого / закрытого ключа

Теперь снова откройте PuTTY и в дереве слева загрузите ранее сохраненную конфигурацию сеанса, выберите узел Connection / SSH / Auth. Найдите свой закрытый ключ, созданный с помощью PuTTYGen, и выберите его для использования.Для остальных настроек оставьте пока значения по умолчанию:

Затем вернитесь к узлу конфигурации сеанса и введите новое имя для этой измененной конфигурации. Как и раньше, я использовал IP-адрес вместе с краткими деталями конфигурации. Затем нажмите «Сохранить»:

Подключение к серверу Linux / OpenSSH с использованием авторизации открытого / закрытого ключа

Хорошо, давайте попробуем подключиться, используя нашу новую конфигурацию. Нажмите кнопку «Открыть» в интерфейсе PuTTY.Вы должны увидеть что-то вроде этого:

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

Поздравляем! Теперь вы вошли в систему на своем Linux-компьютере, используя аутентификацию с открытым / закрытым ключом. Пока мы подключены удаленно, давайте исправим некоторые незакрепленные детали.

Установить права доступа к файлу ключей для владельца / только для чтения

Теперь, когда мы знаем, что наши ключи работают правильно, давайте защитим файл authorized_keys на нашей машине Linux, чтобы мы случайно не изменили или не удалили его. Перейдите в каталог .ssh и введите следующую команду в терминал Bash:

 chmod 400 authorized_keys 

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

Отредактируйте файл конфигурации OpenSSH, чтобы отключить аутентификацию по паролю

Теперь, когда у нас есть рабочая схема аутентификации на основе ключей, у нас больше нет необходимости в менее надежной системе безопасности, основанной только на пароле, которую мы использовали ранее. Фактически, нашим следующим шагом будет редактирование файла конфигурации OpenSSH на нашей Linux-машине, чтобы НЕ разрешать это и ТОЛЬКО принимать аутентификацию на основе ключей.

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

 $ mkdir ssh_config_backup 

Затем используйте следующую команду, чтобы сделать копию файла конфигурации в новом каталоге, который мы только что создали (, примечание : поскольку мы используем sudo , нам будет предложено ввести пароль пользователя, который мы используем на машине Linux) :

 $ sudo cp / etc / ssh / sshd_config ~ / ssh_config_backup 

Затем мы откроем файл sshd_config , используя vi в терминальном режиме.Введите следующее:

 $ Судо vi / и т. Д. / Ssh / sshd_config 

И снова вам будет предложено ввести пароль на машине Linux. После нажатия клавиши Enter вы должны увидеть что-то вроде этого:

Несколько замечаний:

  • Я признаю, что здесь трудно увидеть синий текст. Будет легче читать на вашем реальном экране.
  • Обратите внимание, что мы больше не находимся в терминале Bash как таковом, а вместо этого смотрим на текст файла sshd_config внутри терминала.
  • На данный момент вы ничего не можете редактировать - vi находится в командном режиме.

Мы будем использовать несколько (очень немного) базовых команд vi , чтобы сделать это. Команды, которые нам нужны для редактирования этого документа:

  • Используйте клавиши со стрелками вверх / вниз / влево / вправо для навигации по документу и для размещения курсора внутри строки текста.
  • Если vi находится в командном режиме, введите i (нижний регистр i ), чтобы перейти в режим вставки.
  • Если vi находится в режиме вставки, нажмите клавишу Esc, чтобы вернуться в командный режим.
  • Когда вы закончите редактирование, введите: wq (двоеточие, затем нижний регистр и нижний регистр q), чтобы сохранить и выйти из документа, вернувшись в терминал Bash.

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

 #PasswordAuthentication да 

Мы хотим изменить его на:

 Пароль Аутентификация № 

Хэш-символ в начале этой строки означает, что он был «закомментирован» (то есть игнорируется, когда сервер OpenSSH обращается к этому файлу во время настройки).Кроме того, обратите внимание, что для него установлено значение «да»:

.

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

Можно подумать, это конец. Однако, по крайней мере, в моей текущей системе Linux Mint, мы также должны отключить часть модуля аутентификации пароля (PAM) в файле конфигурации (обычно это последняя строка в файле).Для этого используйте клавишу со стрелкой вниз для перемещения по документу, пока не найдете следующую строку:

 UsePAM да 

Мы хотим изменить его на:

 UsePAM № 

Ваш экран должен выглядеть так:

Используйте клавишу со стрелкой вправо, чтобы перейти к концу этой строки, и введите I, чтобы войти в режим вставки. Измените yes на no , затем нажмите клавишу Esc, чтобы вернуться в командный режим:

Теперь, вернувшись в командный режим, введите следующее:

: wq 

По мере ввода эта команда будет появляться в нижней части экрана vi.

Как только вы нажмете Enter, измененный файл будет сохранен, и вы вернетесь в терминал Bash:

Перезагрузите сервер SSH

В качестве последнего шага нам нужно перезапустить SSH-сервер на машине Linux, чтобы изменения конфигурации, которые мы только что сделали, отразились в службе. Введите в терминал следующую команду и нажмите Enter:

 $ sudo service ssh перезапуск 

Хорошо, теперь выйдите из текущего сеанса PuTTY, закрыв окно PuTTY.Посмотрим, удалось ли нам отказать в доступе тем, кто пытается войти в систему, используя простую аутентификацию по паролю. Снова откройте PuTTY и загрузите исходную конфигурацию сеанса, которую мы настроили без аутентификации на основе ключей, используя только наше имя пользователя, и попытайтесь войти в систему. Если мы все сделали правильно, вы должны увидеть ЭТО неприятный артефакт:

Надеюсь, это помогло некоторым из вас начать использовать OpenSSH и PuTTY для удаленного подключения к вашей Linux-машине из Windows.Конечно, от этого мало пользы, когда, как и я, ваши две машины находятся в одной комнате. В одном из будущих постов я расскажу об использовании SSH для подключения к вашей Linux-машине из Интернета в целом и в сочетании с VNC для создания очень безопасного подключения к удаленному рабочему столу.

Кроме того, я начал изучать это, потому что моя следующая цель - использовать облачные сервисы, такие как Amazon EC2 и Windows Azure. В этом контексте я хочу иметь возможность развернуть виртуальную машину (ВМ), размещенную в облаке, и выполнять такие административные операции.

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

Джон в Google CodeProject

.

Подключение по SSH с Visual Studio Code

В этом руководстве вы узнаете, как создать виртуальную машину (ВМ) в Azure и подключиться к ней с помощью расширения Visual Studio Code Remote - SSH. Вы создадите веб-приложение Node.js Express, чтобы показать, как вы можете редактировать и отлаживать на удаленном компьютере с помощью VS Code, как если бы исходный код был локальным.

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

Предварительные требования

Для начала вам необходимо выполнить следующие шаги:

  1. Установите SSH-клиент, совместимый с OpenSSH (PuTTY не поддерживается).
  2. Установите код Visual Studio.
  3. Иметь подписку Azure (если у вас нет подписки Azure, перед началом работы создайте бесплатную учетную запись).

Установить расширение

Расширение Remote - SSH используется для подключения к узлам SSH.

Установка удаленного доступа - расширение SSH

Удаленный - SSH

При установленном расширении Remote - SSH вы увидите новый элемент строки состояния в крайнем левом углу.

Элемент строки удаленного состояния может быстро показать вам, в каком контексте выполняется VS Code (локальный или удаленный), а щелчок по элементу вызовет команды Remote - SSH.

Создать виртуальную машину

Если у вас нет существующей виртуальной машины Linux, вы можете создать новую виртуальную машину через портал Azure. На портале Azure найдите «Виртуальные машины» и выберите Добавить . Оттуда вы можете выбрать свою подписку Azure и создать новую группу ресурсов, если у вас ее еще нет.

Примечание : В этом руководстве мы используем Azure, но ваша виртуальная машина Linux может быть размещена где угодно, если дистрибутив Linux соответствует этим предварительным требованиям.

Теперь вы можете указать детали своей виртуальной машины, такие как имя, размер и базовый образ. Для этого примера выберите Ubuntu Server 18.04 LTS, но вы можете выбрать последние версии других дистрибутивов Linux и посмотреть поддерживаемые VS Code SSH-серверы.

Настроить SSH

Существует несколько методов аутентификации на виртуальной машине, включая пару открытого / закрытого ключей SSH или имя пользователя и пароль.Мы настоятельно рекомендуем использовать аутентификацию на основе ключей (если вы используете имя пользователя / пароль, расширение будет предлагать вам ввести свои учетные данные более одного раза). Если вы работаете в Windows и уже создали ключи с помощью PuttyGen, вы можете использовать их повторно.

Создать SSH-ключ

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

  ssh-keygen -t rsa -b 2048  

Это сгенерирует ключ SSH. Нажмите Enter при следующем запросе, чтобы сохранить ключ в папке по умолчанию (в каталоге пользователя в виде папки с именем .ssh ).

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

Добавьте SSH-ключ к вашей виртуальной машине

На предыдущем шаге вы создали пару ключей SSH. Выберите Использовать существующий открытый ключ в раскрывающемся списке для SSH источника открытого ключа , чтобы вы могли использовать только что сгенерированный открытый ключ. Возьмите открытый ключ и вставьте его в вашу виртуальную машину, скопировав все содержимое файла id_rsa.pub в открытом ключе SSH . Вы также хотите разрешить своей виртуальной машине принимать входящий трафик SSH, выбрав Разрешить выбранные порты и выбрав SSH (22) из раскрывающегося списка Выбрать входящие порты .

Автоотключение

Замечательная особенность использования виртуальных машин Azure - это возможность включить автоматическое выключение (потому что давайте посмотрим правде в глаза, мы все забываем выключить наши виртуальные машины…). Если вы перейдете на вкладку Management , вы можете установить время, в которое вы хотите выключать виртуальную машину ежедневно.

Выберите Review and Create , затем Create , и Azure развернет вашу виртуальную машину за вас!

После завершения развертывания (это может занять несколько минут) перейдите в новое представление ресурсов для вашей виртуальной машины.

Подключение с помощью SSH

Теперь, когда вы создали SSH-хост, давайте подключимся к нему!

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

Выберите команду Remote-SSH: Connect to Host и подключитесь к хосту, введя информацию о подключении для вашей виртуальной машины в следующем формате: user @ hostname .

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

Перед подключением через Remote - SSH вы можете убедиться, что можете подключиться к своей виртуальной машине через командную строку, используя ssh user @ hostname .

Примечание: Если вы столкнулись с ошибкой ssh: connect to host port 22: Connection timed out , вам может потребоваться удалить NRMS-Rule-106 на вкладке Networking вашей виртуальной машины:

Задайте пользователя и имя хоста в текстовом поле информации о соединении.

VS Code теперь откроет новое окно (экземпляр).Затем вы увидите уведомление о том, что «VS Code Server» инициализируется на узле SSH. После установки VS Code Server на удаленный хост он может запускать расширения и взаимодействовать с вашим локальным экземпляром VS Code.

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

Расширение Remote - SSH также добавляет новый значок на панели действий, и щелчок по нему откроет удаленный проводник.В раскрывающемся списке выберите SSH Targets , где вы можете настроить свои SSH-соединения. Например, вы можете сохранить хосты, к которым вы чаще всего подключаетесь, и получать к ним доступ отсюда вместо того, чтобы вводить пользователя и имя хоста.

После подключения к узлу SSH вы можете взаимодействовать с файлами и открывать папки на удаленном компьютере. Если вы откроете интегрированный терминал (⌃` (Windows, Linux Ctrl + `)), вы увидите, что работаете в оболочке bash , находясь в Windows .

Вы можете использовать оболочку bash для просмотра файловой системы на виртуальной машине. Вы также можете просматривать и открывать папки в удаленном домашнем каталоге с помощью File > Open Folder .

Создайте приложение Node.js

На этом шаге вы создадите простое приложение Node.js. Вы будете использовать генератор приложений, чтобы быстро вывести приложение из терминала.

Установите Node.js и npm

С помощью встроенного терминала (⌃` (Windows, Linux Ctrl + `)) обновите пакеты на своей виртуальной машине Linux, затем установите Node.js, в который входит npm, менеджер пакетов Node.js.

  sudo apt-get update curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs  

Вы можете проверить установку, запустив:

  узел - версия npm - версия  

Установить экспресс-генератор

Express - популярный фреймворк для создания и запуска приложений Node.js. Вы можете сформировать (создать) новое приложение Express с помощью инструмента Express Generator.Экспресс-генератор поставляется как модуль npm и устанавливается с помощью инструмента командной строки npm npm .

  sudo npm install -g экспресс-генератор  

Коммутатор -g устанавливает экспресс-генератор глобально на вашем компьютере, так что вы можете запускать его из любого места.

Создать новое приложение

Теперь вы можете создать новое приложение Express с именем myExpressApp , запустив:

  Экспресс myExpressApp - просмотр мопса  

Параметры --view pug говорят генератору использовать механизм шаблонов pug.

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

  компакт-диск myExpressApp npm установить  

Запустить приложение

Наконец, давайте убедимся, что приложение работает. Из терминала запустите приложение с помощью команды npm start , чтобы запустить сервер.

  npm начало  

Приложение Express по умолчанию запускается на http: // localhost: 3000. Вы ничего не увидите в своем локальном браузере на localhost: 3000, потому что веб-приложение работает на вашей виртуальной машине.

Перенаправление портов

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

Чтобы иметь возможность получить доступ к порту на удаленном компьютере, который может быть недоступен для всех, вам необходимо установить соединение или туннель между портом на вашем локальном компьютере и сервером. Когда приложение все еще работает, откройте SSH Explorer и найдите представление Forwarded Ports . Щелкните ссылку Forward a port и укажите, что вы хотите перенаправить порт 3000:

.

Назовите соединение "браузер":

Теперь сервер будет перенаправлять трафик через порт 3000 на ваш локальный компьютер.Когда вы переходите по адресу http: // localhost: 3000, вы видите работающее веб-приложение.

Редактировать и отлаживать

В проводнике Visual Studio Code File Explorer (⇧⌘E (Windows, Linux Ctrl + Shift + E)) перейдите в новую папку myExpressApp и дважды щелкните файл app.js , чтобы открыть его в редакторе.

IntelliSense

У вас есть подсветка синтаксиса для файла JavaScript, а также IntelliSense с наведением курсора, как если бы исходный код находился на вашем локальном компьютере.

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

Отладка

Установите точку останова в строке 10 файла app.js , щелкнув полость слева от номера строки или поместив курсор на строку и нажав F9. Точка останова будет отображаться в виде красного кружка.

Теперь нажмите F5, чтобы запустить приложение. Если вас спросят, как запустить приложение, выберите Node.js .

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

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

Вы получаете полный опыт разработки Visual Studio Code, подключенный через SSH.

Завершение соединения SSH

Вы можете завершить сеанс через SSH и вернуться к запуску VS Code локально с помощью File > Close Remote Connection .

Поздравляем!

Поздравляем, вы успешно завершили этот урок!

Затем ознакомьтесь с другими расширениями удаленной разработки.

Или получите их все, установив Пакет расширений для удаленной разработки.

06.11.2020

.

5 шагов: Настройка VS Code для удаленной разработки через SSH из Windows в систему Linux | by Gong Na

Иконки, сделанные Pixel Perfect с www.flaction.com

Удаленная разработка - очень популярная функция в VS Code. Их официальная документация содержит стандартные инструкции по настройке в целом. Но когда я подключаюсь к удаленному серверу Linux из системы Windows, я всегда получаю следующее: Corrupted MAC on input error, и трудно найти полное решение в одном месте.Ошибка

: поврежденный MAC на входе

Итак, в этой статье будет представлено руководство по VS Code для удаленного соединения между системами Windows и Linux через ключевой SSH, который также обрабатывает Corrupted MAC on input error .

Зачем нужна удаленная разработка:

  • Разработчики программного обеспечения обычно разрабатывают новые функции локально, а затем тестируют их на удаленных серверах.
  • Специалистам по обработке данных необходимы дополнительные вычислительные ресурсы, такие как удаленный узел графического процессора, для поддержки обработки больших объемов данных.
  • Для инженеров DevOps одной из основных задач является развертывание различных продуктов на разных серверах, а это требует частой удаленной настройки.

Предварительные требования:

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

  • Установлено OpenSSH как в локальной системе Windows, так и в удаленной системе Linux.

Короче говоря, это позволит вам работать с ssh .Вы можете проверить это в обеих системах через ssh -V . Он вернет вам версию установленного OpenSSH в вашей системе. В противном случае OpenSSH не будет установлен. И вы можете установить его здесь для Windows и здесь для Linux.

Теперь давайте начнем ~ 🚀

  Обзор содержания  
Шаг 1: Установите расширение Remote-SSH в VS Code
Шаг 2: Проверьте соединение SSH в PowerShell
Шаг 3. Включите удаленное подключение в VS Code
Шаг 4: Создание пар ключей SSH
Шаг 5: Скопируйте открытый ключ на удаленный сервер

[следующая настройка основана на Win10 PowerShell]

Шаг 1. Установите Remote-SSH Extension в VS Code

Запустите VS Code -> щелкните значок Extension на левой панели -> найдите Remote-SSH в поле поиска -> установите его:

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

Шаг 2: Проверьте SSH-соединение в PowerShell

Щелкните верхний левый Терминал или ярлык ctrl + shift + `, чтобы открыть терминал PowerShell в VS Code -> если это не PowerShell, измените отсюда:

Проверьте соединение SSH, выполнив ssh username @ hostname в PowerShell.(Неважно, запускаете ли вы это в conda env или нет)

Если вы можете успешно войти на удаленный сервер, вы готовы к следующему шагу.

💢 Если вы получаете Corrupted MAC on input error, как показано ниже:

Вы можете попробовать следующее решение:

Сначала запустите ssh -Q mac . Он вернет список всех доступных криптографических алгоритмов MAC в вашей локальной системе:

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

 ssh - m hmac-md5-96 имя пользователя @ имя хоста 

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

Теперь вы можете войти на удаленный сервер и готовы к следующему шагу.

Шаг 3. Включите удаленное подключение в VS Code

Щелкните значок удаленного подключения в левом нижнем углу -> выберите Remote-SSH: Open Configuration File…

, или вы можете напрямую открыть файл конфигурации ssh со своего компьютера. локальный домашний каталог ~ / .ssh / config .

Добавьте информацию об удаленном сервере в файл конфигурации в следующем формате:

 Хост [имя хоста] 
Имя хоста [имя хоста]
Пользователь [имя пользователя]
MAC-адреса [необязательно; если у вас есть ошибка MAC на шаге 2, добавьте доступный алгоритм, который вы нашли здесь]

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

В конце вы получите файл конфигурации, как показано ниже: (Мы вернемся к IdentityFile на следующем шаге)

В этом примере поддерживаются три разных удаленных сервера.

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

Щелкните значок удаленного подключения в нижнем левом углу -> выберите Remote-SSH: Connect to Host… -> вы увидите список удаленных серверов, поддерживаемых в вашем файле конфигурации -> щелкните целевой сервер (вам может потребоваться для ввода пароля для входа)

Список обслуживаемых хостов

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

До этого момента вы успешно настроили удобное рабочее пространство для удаленной разработки с помощью VS Code.Но это еще не конец.

Если вы остановитесь здесь, вам будет предлагаться вводить пароль для входа каждый раз, когда вы запускаете удаленное соединение. И вам также необходимо ввести пароль для каждой отдельной операции на этом удаленном сервере через VS Code, даже просто открыв папку. Это было бы очень неприятно. С другой стороны, вход по паролю недостаточно безопасен. Он прост в использовании и понятен для всех, но это удобство каким-то образом приносит в жертву уровень безопасности. Пароль может быть легко взломан перебором.

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

Шаг 4: Создание пар ключей SSH

В терминале VS Code Powershell выполните команду:

 ssh-keygen 

Во время генерации ключа появится запрос:

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

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

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

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

 cd ~ / .ssh 
ls

. Вы увидите два новые файлы id_rsa , в которых хранится закрытый ключ, и id_rsa.pub , в котором хранится открытый ключ. Запустите cat [имя файла] , чтобы проверить содержимое ключа.

Если все нормально. Теперь вы можете добавить путь к закрытому ключу ~ / .ssh / id_rsa в файл конфигурации ssh как Step 2 с именем IdentityFile :

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

Шаг 5: Скопируйте открытый ключ на удаленный сервер

Войдите на удаленный сервер с помощью VS Code или любого другого терминала с паролем.Проверьте, есть ли у вас файл authorized_keys в каталоге ~ / .ssh . Если нет, создайте его с помощью следующих команд:

 cd ~ / .ssh 
touch authorized_keys

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

Затем сохраните свой открытый ключ (содержимое в вашем локальном ~ /.ssh / id_rsa.pub ) в этом удаленном файле:

vim authorized_keys -> нажмите i , чтобы перейти в режим INSERT -> вставьте сюда содержимое открытого ключа -> нажмите ESC + : + wq для записи и выхода из файла -> перепроверьте его с помощью cat authorized_keys .

Теперь ваше безопасное и удобное рабочее пространство для удаленной разработки в VS Code готово!

Заключение

Просто вернитесь к своему VS Code.Создайте новое удаленное соединение. Теперь вы должны иметь возможность подключиться к удаленному серверу без пароля и работать с ним так же, как и локально. Радоваться, веселиться!

.

Смотрите также