Remote-SSH - правим код на сервере не покидая VSCode

В этой статье мы разберемся, как настроить удаленную разработку в VS Code через плагин remote-ssh.

Все последующие действия провожу в операционной системе семейства linux (linux mint 20.1), если вы собираетесь настраивать Remote-SSH в Windows 10, то рекомендуется предварительно настроить WSL, об этом процессе можно прочитать, перейдя по ссылке.

Установка Remote-SSH в редактор VSCode

Перейдите в Расширение и в поиске найдите пакет Remote SSH, разработчиком которого указана компания Microsoft. Нажмите на кнопку «Установить», чтобы установить пакет.

vscode-ssh-1

Также автоматически будут установлены дополнительные пакеты.

Настройка SSH-соединения в редакторе VSCode

Есть два способа настроить подключение по SSH.

  • Аутентификация с вводом пароля.
  • Аутентификация через SSH ключи.

Рекомендуется использовать аутентификацию на основе ключей SSH, поскольку она более безопасна и уменьшает время, связанное с постоянным вводом паролей. Нажмите F1 или CTRL + SHIFT + P и введите remote-ssh. Он покажет список доступных команд. Выберите Add New SSH Host.

vscode-ssh-2

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

ssh username@ip

vscode-ssh-3

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

Рекомендуется создать собственный файл конфигурации, выбрав «Настройки» и указав расположение своего файла. Вы также можете добавить параметр remote.SSH.configFile в файл settings.json и обновить расположение пользовательской конфигурации.

{
  "remote.SSH.configFile": "path-to-file"
}

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

Host xxx.com
    User USERNAME
    HostName IP
    IdentityFile "SSH KEY LOCATION"

Вот как работает этот файл конфигурации:

  • Host: указывает имя вашего хоста. Это позволяет использовать короткое имя или аббревиатуру вместо полного IP-адреса либо имя хоста при подключении к серверу.
  • HostName: фактическое имя хоста сервера, которое представляет собой либо IP-адрес, либо полностью квалифицированное доменное имя.
  • User: пользователь, от имени которого вы хотите выполнить подключение.
  • IdentityFile: путь к вашему закрытому ключу SSH. На системах Mac и Linux вы найдете ее в домашнем каталоге в скрытом каталоге .ssh, обычно id_rsa. Если вы используете Windows, у вас будет указано местоположение для сохранения этого файла при его создании с помощью putty-gen.

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

Теперь давайте подключимся к удаленному хосту, нажав F1 или CTRL + SHIFT + P -> REMOTE-SSH -> CONNECT TO HOST -> CHOOSE HOST IP.

Теперь вам будет предложено проверить fingerprint, поскольку это первое подключение к удаленному компьютеру.

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

Подключитесь к удаленному серверу SSH с помощью ключа авторизации в VSCode

Для активации SSH key-based authentication, сгенерируйте пару публичного и приватного ssh ключей с помощью следующей команды.

ssh-keygen -t rsa -b 4096

И скопируйте публичный ключ на удаленный сервер с помощью следующей команды (заменив username@host на своё значение)

ssh-copy-id -i ~/.ssh/id_rsa.pub username@host

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

IdentityFile ~/ssh/id_rsa

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

Чтобы открыть логи, нажмите F1 или CTRL + SHIFT + P –> REMOTE-SSH –> Show Log.

Чтобы закрыть активное соединение, выберите close remote connection, нажав F1 или CTRL + SHIFT + P -> REMOTE-SSH -> Close Remote Connection, или просто закройте vscode, который отключит сеанс.

ProxyCommand

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

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

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

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

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

ControlMaster

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

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

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

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

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

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

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

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

Настройка Remote-SSH для подключения к хостингу BEGET

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

Если попробовать подключиться через Remote-SSH к хостингу BEGET, то появится ошибка, чтобы её исправить нужно сделать две вещи:

  1. Настроить авторизацию к докер контейнеру бегет без ввода пароля
  2. Добавить автоматический вход в докер контейнер при авторизации к ssh

Настройка авторизации к докер контейнеру бегет без ввода пароля

Подключаемся к ssh вашего хостинга бегет, затем вводим команду

ssh-copy-id "-p 222 localhost"

Вводим пароль подключения и нажимаем enter.

Теперь проверим, что всё прошло успешно, пробуем подключится к докер контейнеру

ssh localhost -p 222

Если подключение прошло без ввода пароля, значит всё работает.

Автоматический вход в докер контейнер beget при авторизации к ssh

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

Убеждаемся, что находимся в домашней директории (~). Редактируем файл .bashrc.

nano .bashrc

Добавляем в самый верх следующие строки

if echo $SSH_CLIENT | grep --quiet -v '127\.0\.0\.1'
then
   ssh localhost -p 222
fi

Сохраняем изменения.

Пробуем подключиться через Remote-SSH.

Заключение

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

Теперь у вас есть Visual Studio Code, настроенный для разработки на удаленном сервере с помощью SSH. Удаленное исполнение при помощи IDE обеспечивает множество преимуществ, в том числе способность быстро тестировать процесс выполнения вашего кода на различных операционных системах и с различными техническими спецификациями оборудования. Если у вас есть подключение к Интернету, вы можете подключаться к вашему серверу и работать над вашим кодом с любого компьютера, а также можете заниматься разработкой в среде Linux, даже если будете использовать Windows в качестве основной операционной системы.