{"id":18942432,"url":"https://github.com/exitfound/docker-autossh","last_synced_at":"2026-04-16T14:04:15.292Z","repository":{"id":180779224,"uuid":"434979891","full_name":"exitfound/docker-autossh","owner":"exitfound","description":"Утилита autossh, запускаемая в контейнере Docker.","archived":false,"fork":false,"pushed_at":"2023-02-09T19:45:58.000Z","size":75,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-25T10:43:06.332Z","etag":null,"topics":["autossh","bash","docker","openssh","script","ssh"],"latest_commit_sha":null,"homepage":"","language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/exitfound.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-12-04T18:33:50.000Z","updated_at":"2025-01-10T21:35:35.000Z","dependencies_parsed_at":"2023-07-12T20:37:52.211Z","dependency_job_id":null,"html_url":"https://github.com/exitfound/docker-autossh","commit_stats":null,"previous_names":["exitfound/docker-autossh"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/exitfound/docker-autossh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exitfound%2Fdocker-autossh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exitfound%2Fdocker-autossh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exitfound%2Fdocker-autossh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exitfound%2Fdocker-autossh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exitfound","download_url":"https://codeload.github.com/exitfound/docker-autossh/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exitfound%2Fdocker-autossh/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268356088,"owners_count":24237380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autossh","bash","docker","openssh","script","ssh"],"created_at":"2024-11-08T12:32:50.091Z","updated_at":"2026-04-16T14:04:15.262Z","avatar_url":"https://github.com/exitfound.png","language":"Groovy","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Мотивация:\n\nПо умолчанию утилита autossh не восстанавливает туннель после перезапуска системы или разрыва соединения. Её, конечно, можно запустить с помощью systemd, однако такой вариант, в сравнении с Docker, мне не подошел (хотя и в случае с Docker есть свои нюансы). В общем, в качестве альтернативы, решил использовать autossh в контейнере. К тому же, те решения, которые есть на текущий момент на Github, лично меня не устраивают, из-за чего озаботился созданием собственного образа.\n\n## Предустановка:\n\nЧтобы контейнер был успешно запущен, необходимо выполнить ряд предварительных требований:\n\n- Для использования необходимо, чтобы на вашей системе был установлен Docker и Docker-compose.\n\n- Для использования необходимо сгенерировать пару ключей.\n\n- Для использования необходимо указать свои данные в параметре ENTRYPOINT, если мы говорим об иммутабельной сборке нашего образа:\n\n## Запуск иммутабельного контейнера:\n\nПосле того как проект был склонирован, необходимо перейти в директорию, чтобы собрать образ. Только перед этим стоит изменить содержимое строки entrypoint, подставив свои значения. В целом сделать это можно с помощью следующей команды:\n\n```\ndocker build -t \"autossh:autossh\" -f ./immutable/autossh.dockerfile --build-arg SSH_PRV_KEY=\"$(cat ~/.ssh/id_rsa)\" .\n```\n\nгде:\n\n- autossh:autossh: это имя образа:тэга.\n- autossh.dockerfile: путь к файлу Dockerfile.\n- build-arg: аргумент, в который мы передаём приватный ключ, который в свою очередь располагается на хостовой системе. При этом публичный ключ уже должен быть расположен на целевом узле.\n\nПосле того как образ был собран, контейнер можно запустить с помощью следующей команды:\n\n```\ndocker run -d --name autossh --network host --restart unless-stopped autossh:autossh\n```\n\n## Запуск контейнера с переменными:\n\nЕсли вам нужно запустить несколько контейнеров с разными значениями, можно использовать параметр -e. Только предварительно необходимо собрать образ на базе другого Dockerfile, который будет заточен под работу с переменными, так как содержимое несколько отлично от иммутабельного контейнера. Собрать образ можно с помощью следующей команды:\n\n```\ndocker build -t \"autossh-envs:autossh-envs\" -f autossh.dockerfile --build-arg SSH_PRV_KEY=\"$(cat ~/.ssh/id_rsa)\" . \n```\n\nЗапуск контейнера будет выглядеть следующим образом:\n\n```\ndocker run -d -e SSH_TUNNEL_PORT=\"22\" -e SSH_TUNNEL_MODE=\"-L\" -e SSH_TUNNEL_REMOTEPORT=\"80\" -e SSH_TUNNEL_IP=\"192.168.88.218\" -e SSH_TUNNEL_LOCALPORT=\"8080\" -e SSH_TUNNEL_USER=\"vault\" -e SSH_TUNNEL_HOST=\"192.168.88.218\" --name autossh --network host --restart unless-stopped autossh-envs:autossh-envs\n```\n\n– где все переменные ссылаются на имена, указанные в скрипт файле autossh.sh, который после вызывается в Dockerfile с помощью entrypoint.\n\n## Запуск через docker-compose:\n\nПо сути своей это та же сборка образа с указанием переменных, где запуск осуществляется не через команду docker run. Полезно будет, если вам нужно autossh добавить к уже существующему композу, где присутствуют прочие сервисы. Однако, чтобы передать ключ с хостового узла в аргумент, необходимо задействовать команду из вне, поэтому перед запуском docker-compose необходимо экспортировать ключ в переменную, поскольку реализацию запрашиваемой функции композ осуществить не может. Последовательность команд выглядит следующим образом:\n\n```\nexport SSH_PRV_KEY=\"$(cat ~/.ssh/id_rsa)\"\n```\n\nПосле можно запускать docker-compose. Сделать это можно следующим образом:\n\n```\ndocker-compose -f autossh-docker-compose.yaml up -d\n```\n\nАльтернативный вариант запуска заключен в файле Makefile, который делает тоже самое, но одной командой. Чтобы запустить, выполните:\n\n```\nmake -f Makefile\n```\n\nПримечание: Перечисленные в композе переменные, по желанию, можно также записать в .env файл, предварительно создав его. А в самом композе, вместо существующих переменных, вызывать этот .env файл. Оба варианта одинаково применимы.\n\n## Работа с autossh:\n\nВ данном случае команда выражена следующим образом:\n\n```\nautossh -N -M 0 -o \"ServerAliveInterval 45\" -o \"ServerAliveCountMax 2\" -o \"StrictHostKeyChecking no\" -i /home/autossh/.ssh/id_rsa -p 22 -L 8080:192.168.88.225:80 medoed@192.168.88.225\n```\n\nгде:\n\n- -N – отменяет попадание в консоль целевого сервера. По сути данный параметр позволяет указывать autossh в качестве точки входа.\n- -M 0 – отключает мониторинг порта.\n- -о \"ServerAliveInterval 45\" – количество секунд, которое клиент будет ожидать перед отправкой нулевого пакета на сервер.\n- -о \"ServerAliveCountMax 2\" – будет пытаться выполнить описанный выше процесс до двух раз.\n- -o \"StrictHostKeyChecking no\" – автоматическое принятие ключа. Данный параметр обязателен для работы контейнера.\n- -i – указывается путь к приватному ключу внутри контейнера.\n- -p – указывается номер порта удаленного сервера.\n- -L 8080:192.168.88.225:80 – конструкция создаваемого туннеля.\n- [medoed@192.168.88.225](https://www.twitch.tv/exitfound) – имя пользователя и IP-адрес целевого сервера.\n\nВ общем случае необходимо будет только подставить значение своего порта для SSH, тип туннеля и соответствующие порты для туннеля, а также имя пользователя и IP-адрес целевого сервера.\n\nБолее подробно про SSH-туннели можно узнать по следующей ссылке – https://t.me/opengrad/50.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexitfound%2Fdocker-autossh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexitfound%2Fdocker-autossh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexitfound%2Fdocker-autossh/lists"}