Рейтинг:1

Создание постоянного обратного SSH-соединения с удаленного сервера на домашний клиент

флаг au

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

До сих пор я пробовал: ssh -R 2222:localhost:22 root@<ip-сервера> -p 2222 и ssh -L 2222:localhost:22 root@<ip-сервера> -p 2222 в работе cron.

Я слушаю на сервере, используя нк-lvnp 2222 и я получаю сообщение о подключении, говорящее Соединение получено на 104.136.5.228 63119 SSH-2.0-OpenSSH_8.8p1 Debian-1

Я также пытался использовать закрытый ключ моего сервера для входа через SSH. От клиента: ssh-copy-id root@<ip-сервера> и ssh -i id_rsa root@<ip-сервера>.

Ответ сервера: root@<server-ip>: Отказано в доступе (открытый ключ).

Но обратной оболочки не возникает. Любая помощь в правильном направлении приветствуется.

John Ronald avatar
флаг ca
Убедитесь, что ваш ~/.ssh/authorized_keys имеет правильные разрешения
Рейтинг:2
флаг br
gma

Если вы хотите установить ssh-подключение к своему домашнему хосту, вам нужен работающий на нем демон ssh:

# предполагается, что ssh-сервер уже установлен на домашнем хосте
домашний хост $ sudo systemctl запустить sshd

Вы можете создать постоянный обратный ssh-туннель между домашним и удаленным хостами с помощью:

домашний хост $ ssh -Nf -R 2222:localhost:22 удаленный хост

-Нф переведет ssh-клиент в фоновый режим без выполнения какой-либо команды на сервере.

-R 2222: локальный: 22 выделит сокет для прослушивания на локальном хосте: 2222/tcp на удаленном хосте. Этот сокет будет пересылать все пакеты на home-host:22/tcp через установленное безопасное соединение.

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

удаленный хост $ ssh localhost -p 2222

Обратите внимание, что вы можете использовать эту технику для подключения к любой сетевой службе, работающей на домашнем хосте, а не только к sshd. Например, если у вас есть веб-сервер, работающий на 80/tcp на домашнем хосте, его можно туннелировать с помощью:

домашний хост $ ssh -Nf -R 8080:localhost:80 удаленный хост

Итак, на удаленном хосте волшебство происходит с:

удаленный хост $ wget http://localhost:8080
pa4080 avatar
флаг cn
Хороший ответ! Я бы также добавил параметр `-T`, который отключает выделение псевдотерминала для команды `ssh`: `ssh -TNf ...`
Рейтинг:1
флаг cn

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

sudo apt установить autossh

Затем создайте файл конфигурации SSH.

судо нано /etc/ssh/ssh_config.d/auto-ssh-systemd-hosts.conf
Хост reverse.server-name.com
    Имя хоста 192.168.1.199
    IdentityFile /root/.ssh/имя-сервера.com/id_rsa
    Пользователь Пользователь
    Порт 2222
    Локальный Форвард 22 127.0.0.1:2222
    Удаленный Форвард 2222 127.0.0.1:22
    Порты шлюза да
    Сжатие да
  • Обратите внимание, что ключ SSH принадлежит пользователю root, поскольку он будет владельцем службы.
  • Не забудьте изменить параметры Хозяин, Имя хоста и IdentityFile.
  • Здесь предполагается, что ssh-сервер в обеих системах прослушивает пользовательский порт 2222.

На этом этапе вы должны уметь:

sudo ssh reverse.server-name.com # или
sudo autossh reverse.server-name.com

Наконец, создайте службу.

sudo nano /etc/systemd/system/autossh-reverse-server-name.service
[Ед. изм]
Description=Сохраняет туннель SSH к 'server-name.com' открытым
After=network-online.target

[Оказание услуг]
Пользователь=корень
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" reverse.server-name.com
ExecStop=/usr/bin/killall -s KILL autossh
Перезапустить = всегда
Рестартсек=3

[Установить]
WantedBy=многопользовательская.цель
  • Заменять имя-сервера.com и reverse.server-name.com с реальными значениями.

Теперь включите и запустите службу.

sudo systemctl демон-перезагрузка
sudo systemctl включить autossh-reverse-server-name.service
sudo systemctl запустить autossh-reverse-server-name.service

Для того, чтобы остановить и отключить службу.

sudo systemctl остановить autossh-reverse-server-name.service
sudo systemctl отключить autossh-reverse-server-name.service

Вы можете получить статус или перезапустить службу с помощью следующих команд.

статус sudo systemctl autossh-reverse-server-name.service
sudo systemctl перезапустить autossh-reverse-server-name.service

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

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


После запуска службы вы сможете:

[email protected]:~$ ssh localhost -p 22 # подключиться к локальной машине
user@local-machine:~$ ssh localhost -p 22 # подключиться к server-name.com

Конечно, вам нужно будет предоставить правильные данные аутентификации командам.

Ответить или комментировать

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