# SSHd туннель

к сведению

Доступно только по [подписке](https://tuna.am/#pricing).

## Обзор

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

***

к сведению

Создание SSHd туннеля доступно только в Unix-подобных операционных системах (macOS, Linux, FreeBSD), Windows не поддерживается.

## Примеры

примечание

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

```shell
tuna ssh --help

```

Почти для всех флагов есть аналогичные [переменные окружения](https://tuna.am/docs/guides/environment-variables.md).

### Базовый пример

```shell
tuna ssh

```

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

```shell
Connection instruction:
1. echo "[ru.tuna.am]:12524 ssh-ed25519 xxx" >> ~/.ssh/known_hosts
2. ssh -p 12524 ru.tuna.am
3. ru.tuna.am's password: fsk3xdpgqpje7m5l

```

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

warning

Адрес туннельных нод является публичным, злоумышленники могут просканировать порты, найти запущенные SSHd туннели и вести подбор пароля. По этому мы не рекомендуем использовать аутентификацию по паролю, особенно для долгоживущих SSHd туннелей [запущенных как сервис](https://tuna.am/docs/tunnels/guides/service.md). Ниже есть инструкция как включить *аутентификацию по ssh ключу* и *запретить аутентификацию с помощью пароля*

### Статичный пароль

Логин и пароль можно определить статически, с помощью флага `--auth` или переменной окружения `TUNA_SSH_AUTH`:

```shell
tuna ssh --auth="*:pass"

```

Где `*` означает, что проверка имени производиться не будет, для ограничения по имени пользователя следует использовать следующий формат:

```shell
tuna ssh --auth="user:pass"

```

### Аутентификация по ssh ключу

Для аутентификации по ключам, необходимо предварительно добавить публичный ключ в разделе [SSH ключи](https://tuna.am/docs/guides/ssh-keys.md) в [личном кабинете](https://my.tuna.am/public_keys). А также на этой же странице, в настройках, включить - **Разрешить подключения с помощью своих SSH ключей**. В случае команды у вас может быть какой то общий ключ, и вы можете - **Разрешить подключения участникам команды**

1. На странице [SSH ключей](https://my.tuna.am/public_keys) - добавить публичный ключ.
2. Разрешить подключения в SSH туннелях с помощью своих SSH ключей:

![](/docs/img/ssh-keys.png)

### Запретить аутентификацию с помощью пароля

```shell
tuna ssh --password-auth=false

```

### С указанием токена

Можно указать специфичный токен через флаг `--token` или переменную окружения `TUNA_TOKEN`. Переопределение происходит в соответствии с политикой [очерёдности конфигурации](https://tuna.am/docs/guides/config-ordering.md).

```shell
tuna ssh --token=tt_***

```

### С указанием региона для подключения

Можно указать специфичный [регион](https://tuna.am/docs/tunnels/guides/locations.md) через флаг `--location`/`-l` или переменную окружения `TUNA_LOCATION`. Переопределение происходит в соответствии с политикой [очерёдности конфигурации](https://tuna.am/docs/guides/config-ordering.md).

```shell
tuna ssh --location=nl

```

### Статичный порт

В качестве значения флага `--port`/`-p` может выступать алиас или назначенный порт. Порты можно резервировать в [личном кабинете](https://my.tuna.am/tcp_ports) и после перезапуска туннеля адрес останется прежним. Подробнее о портах читайте в отдельной [инструкции](https://tuna.am/docs/tunnels/ports.md).

```shell
tuna ssh --port=ssh
tuna ssh --port=35000

```

### Ограничение доступа по подсетям IP

Вы можете определить белый список [подсетей](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D1%81%D0%B5%D1%82%D1%8C) в CIDR-формате:

```shell
tuna ssh --cidr-allow="10.0.0.1/32"

```

Либо запретить доступ из определенных подсетей:

```shell
tuna ssh --cidr-deny="10.0.0.1/32"

```

Можно комбинировать, например указать широкую сеть и вычесть частные IP:

```shell
tuna ssh --cidr-allow="10.0.0.1/24" --cidr-deny="10.0.0.33/32"

```

Также можно передавать списки через запятую:

```shell
tuna ssh --cidr-allow="10.0.0.1/24,192.168.0.1/24" --cidr-deny="10.0.0.33/32,192.168.0.33/32"

```

## Запись SSH сессий

Запись сессий включено по умолчанию, управляется флагом `--record-session` или переменной окружения `TUNA_RECORD_SESSION`:

```shell
tuna ssh --record-session=false

```

## Управление и просмотр SSH сессий

Для просмотра записей и их управления есть отдельная команда `tuna ssh-session`.

### Вывести список

Выполняется командой `tuna ssh-session list`:

```shell
tuna ssh-session list
INFO[11:14:12] 2024-10-28 11:13:49. 2o3u9YtqncQ5JfCtrj73WjFHDqR (jidckii, active)

```

### Просмотр записи

Выполняется командой `tuna ssh-session watch [session]`:

```shell
tuna ssh-session watch 2o3u9YtqncQ5JfCtrj73WjFHDqR
tuna:jidckii> ^C
tuna:jidckii> exit                                                       

```

### Удалить все записи

```shell
tuna ssh-session clear

```

## Поведение

### SFTP

SFTP поддерживается, ничего дополнительно настраивать не нужно.
