Remote workflow (part 1)

SSH-подключение к серверу, ProxyJump, ssh-agent и bash-скрипт для мгновенного логина
unix
ru
Published

May 11, 2025

Modified

May 14, 2025

English version

Введение

Это первая часть руководства по настройке удалённого рабочего процесса. Цель – помочь быстро начать работу на сервере, используя один из удобных и проверенных способов. Мы пройдем путь от выдачи логинов до первого запуска Jupyter Lab, при этом будем опираться только на несколько базовых команд. Предполагается, что вы используете R или Python в качестве языков программирования для анализа данных.

Инструкция рассчитана на пользователей macOS, Linux и Windows WSL. Всё, что вам нужно, — стандартный терминал и установленный OpenSSH-клиент.

Мотивация

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

  • Мобильность. Подключайтесь с любого устройства - планшета, ноутбука или телефона.

  • Производительность. Серверы часто имеют сотни гигабайт ОЗУ, множество ядер и производительные GPU.

  • Большие данные. Нет необходимости переносить большие файлы на локальную машину.

  • Экономия батареи. Вычисления выполняются на сервере, а не на вашем ноутбуке, что особенно удобно в дороге.

  • Долгосрочные задачи. Можно запускать задачи, которые будут работать неделями или месяцами, не беспокоясь, что компьютер придётся выключить.

  • Поддержка. Сервер обслуживается администратором: бэкапы, обновления, безопасность.

Подключение по SSH через прокси

Скорее всего сервер компании будет недоступен напрямую извне в целях безопасности. Обычно доступ к корпоративному серверу организован через VPN или прокси. Здесь мы рассмотрим схему с прокси. Схематично оно выглядит так:

Figure 1: Изображение сгенерировано с помощью ChatGPT.

Сперва необходимо получить логин и пароль от прокси-сервера и от основного сервера. Попросите их у администратора сервера или у ИТ службы поддержки. Предположим:

  • Прокси 108.177.126.0
  • Основной сервер 11.6.3.10
  • Пользователь bob

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

ssh bob@108.177.126.0

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

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

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

ssh bob@11.6.3.10

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

Упрощённая авторизация

Чтобы не вводить пароль от каждого сервера (основного и прокси), настроим автоматический ProxyJump и вход по ключу.

Автоматический вход через прокси-сервер

На локальной машине откройте файл ~/.ssh/config в любом текстовом редакторе, а если файла нет, то создайте его. Допустим, у нас несколько основных серверов, у которых IP-адреса 11.6.3.10, 11.6.3.11 и т.п., прокси сервер имеет адрес 108.177.126.0, а имя пользователя bob. Тогда введем в этот файл:

Host 11.6.3.*
    User bob
    ProxyJump 108.177.126.0

Теперь достаточно ввести:

ssh 11.6.3.10

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

Вход по SSH-ключу

Сгенерируем ssh-ключ на локальной машине:

ssh-keygen -t rsa

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

ssh-keygen -t ed25519

RSA же является более совместимым со старыми серверами.

Жмём Enter для пути по умолчанию. Можно задать короткую passphrase — например 2–3 буквы и цифры - или оставить пустой (не рекомендуется).

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

cat ~/.ssh/id_rsa.pub

Теперь необходимо скопировать этот ключ на прокси-сервер и на основной сервер. Воспользуемся командами:

# копируем ssh-ключ на прокси сервер
ssh-copy-id -i ~/.ssh/id_rsa.pub bob@108.177.126.0

# на основной сервер
ssh-copy-id -i ~/.ssh/id_rsa.pub bob@11.6.3.10

Если всё получилось правильно, то команда

ssh 11.6.3.10

работает с короткой passphrase.

Если вам приходится часто подключаться к серверам, то вы можете воспользоваться командой ssh-add, чтобы он “подкладывал” ssh-ключи утилите ssh без ввода passphrase. Список полезных команд:

# хранит ключ ровно столько, сколько живет сам `ssh-agent`
ssh-add 

# если видите список ключей - агент активен
ssh-add -l   

# хранит ключ 8 часов
ssh-add -t 8h

Альтернативный подход

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

Предлагается использовать такую конфигурацию ssh конфигов:

cat ~/.ssh/config

Host 11.6.3.*
    User bob
  ServerAliveInterval 30
  
  
cat ~/.ssh/config_proxy

Host 11.6.3.*
    User bob
    ServerAliveInterval 30
    ProxyJump 108.177.126.0

Для быстрого переключения используется bash скрипт, назовем его con. Создадим файл (и папку) ~/username/bash_scripts/con, запишем в него:

#!/bin/bash

server=$1
with_proxy=$2


if [ "$with_proxy" == "" ]; then
    ssh -Y bob@11.6.3.$server -t "bash"
else
    ssh -Y bob@11.6.3.$server -F ~/.ssh/config_proxy -t "bash"
fi

-Y — позволяет открывать X11 окна на локальной машине, -t "bash" — открывает bash оболочку на сервере, если по умолчанию на сервере стоит другая.

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

chmod u+x ~/username/bash_scripts/con

Добавьте путь к скрипту в переменную PATH, чтобы команда con была видна не только в папке, где лежит этот скрипт. Для этого откройте файл (или создайте, если его нет) ~/.bashrc (для macOS это ~/.bash_profile или ~/.zshrc) и вставьте строку:

export PATH="$PATH:/home/username/bash_scripts/"

Теперь используем:

  • внутри сети
con 10 

Вы попадете на машину 11.6.3.10

  • Извне (через прокси):
con 10 anysymbol

Второй аргумент может быть любым символом — он просто сигнализирует скрипту выбрать конфиг config_proxy. Логика упрощает ввод: без аргумента — прямое подключение, с аргументом — через прокси

Как это выглядит у автора:

Figure 2

Заключение

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

Продолжение

Во второй части будет рассмотрена установка python, R, Jupyter Lab, Coder и настройка удаленного рабочего процесса (workflow).