У меня есть сервер (например, 44.44.44.44), на котором работает веб-сервер. Я перенаправил pollnote.com на сервер, чтобы получить доступ к моему веб-серверу. Все работает отлично.
Для доступа к серверу я добавил свой публичный ключ в .ssh/authorized_keys, чтобы я мог выполнить ssh [email protected] для входа без проблем.
Проблема возникает, когда я пытаюсь сделать это так: ssh [email protected]. Терминал просто ничего не отображает и ждет меня, пока я не решу прервать команду.
Что мне нужно сделать, чтобы получить доступ к серверу, используя имя домена в качестве ссылки?
ОБНОВЛЕНИЕ
Следует упомянуть, что я получаю доступ к серверу через CloudFlare. Может быть, это имеет значение..?
данные
➜ ~ dig pollnote.com
; <<>> DiG 9.9.5-9ubuntu0.1-Ubuntu <<>> mydomain.com
;; глобальные параметры: +cmd
;; Получен ответ:
;; ->>HEADER<<- код: QUERY, статус: NOERROR, id: 56675
;; флаги: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: версия: 0, флаги:; udp: 512
;; ВОПРОС СЕКЦИЯ:
;pollnote.com. В A
;; СЕКЦИЯ ОТВЕТА:
pollnote.com. 299 В A 104.27.165.70
pollnote.com. 299 В A 104.27.164.70
;; Время запроса: 54 мс
;; СЕРВЕР: 127.0.1.1#53(127.0.1.1)
;; КОГДА: Чт, 30 июля 2015 19:12:38 CEST
;; РАЗМЕР MSG: получен: 73
➜ ~ ssh -vvv [email protected]
OpenSSH_6.7p1 Ubuntu-5ubuntu1, OpenSSL 1.0.1f 6 янв 2014
debug1: Чтение файла конфигурации /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config строка 19: Применение параметров для *
debug2: ssh_connect: needpriv 0
debug1: Подключение к pollnote.com [104.27.165.70] порт 22.
Когда вы подключаетесь по IP-адресу, соединение SSH идет непосредственно к вашему серверу, но если вы используете имя домена, оно проходит через защиты Cloudflare. Мое предложение — либо использовать direct.pollnote.com (думаю, CloudFlare создает его автоматически, но люди часто удаляют его), либо добавить свой собственный псевдоним, например, ssh.pollnote.com и отключить защиту CloudFlare на нем.
Дружественное дополнение: подумайте о том, чтобы использовать что-то другое, чем ssh.yourserver.com, чтобы потенциальным злоумышленникам было сложнее идентифицировать IP-адрес вашего хоста.
В статье мы упоминали, что наша схема наименования также позволяет предотвратить непреднамеренное раскрытие информации, публично выставляя только короткое случайное имя хоста, пока функциональные имена разрешаются исключительно в локальной сети.
Затем я добавил подобные записи CNAME для ftp и sftp, так что, например, имя хоста ftp в вашем ftp-клиенте изменяется с:
mywebsite.com
на
ftp.mywebsite.com.
Я не уверен, можно ли вместо CNAME создать запись A, но, судя по Cloudflare, это возможно.
Большое спасибо @dtoubelis за ответ.
Я нашел хитрый способ. Я создал скрипт, используя API Cloudflare, чтобы получить реальный IP моего сервера, после чего я могу использовать IP для подключения к своему серверу. Таким образом, все адреса в Cloudflare остаются проксируемыми.
Вам необходимо установить curl и jq (sudo apt install jq). Создайте свой API токен с правами Zone.DNS.Read.
#!/bin/bash
# подключение через API cloudflare для получения реального IP домашнего сервера
IP=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/<YOUR_ZONE_ID>/dns_records?type=A&name=<YOUR_DOMAIN>&match=all" \
-H "Authorization: Bearer <API_TOKEN_HERE>" \
-H "Content-Type: application/json" | jq -r '.result[].content')
# используйте восстановленный IP-адрес для подключения к серверу удаленно.
ssh -i ~/.ssh/<YOUR_KEY_FILE> <USER>@"$IP" -p <PORT_NUMBER>
Наслаждайтесь!
Просто хочу добавить комментарии о моей ситуации, так как она похожа, но не совсем такая же — и вышеупомянутое сообщение помогло.
У меня есть веб-сайт, размещенный на VPS GoDaddy. SSL сертификат истекал, я не хотел платить за новый от GoDaddy (80 долларов и более), и не хотел использовать один из бесплатных сервисов (например, https://letsencrypt.org), так как их сертификаты действительны только три месяца. (Я знаю, используйте CertBot, бла-бла-бла — я предпочел бы сделать это вручную, чем иметь еще одну автоматизированную систему, о которой нужно беспокоиться.) В любом случае, перенес DNS-хостинг в Cloudflare, понял, что мне нужно использовать их как обратный прокси, чтобы получить бесплатный сертификат, так что я это сделал. Затем я понял, что больше не могу подключаться по SSH к my VPS хосту, используя имя домена, так как он был проксируемым, а Cloudflare перенаправляет только порты 80 и 443 (я знаю, туннелирование, бла-бла-бла, больше настроек).
Кратко: легкий способ — это просто добавить запись A DNS для ssh.example.com и сделать ее непроксируемой (то есть только DNS). И, как указал @Jeremy, вы можете использовать что-то неясное вместо ssh для вашего сабдомен, если хотите. Однако я доверяю своему паролю и CloudFlare в защите от DDoS, и часть всего этого упражнения для меня заключалась в том, чтобы облегчить запоминание, как туда добраться, поэтому я использовал ssh в качестве сабдомена.
Я знаю, что вопрос OP уже был рассмотрен, но я подумал, что это может быть полезно для других, кто окажется здесь в ситуации, похожей на мою.
Ответ или решение
Когда вы пытаетесь получить доступ к вашему серверу через SSH с использованием доменного имени, защищенного Cloudflare, важно понимать, как настроен прокси-сервер и какие порты поддерживаются Cloudflare. В данной ситуации вы столкнулись с проблемой доступа к серверу, когда система не находит соединение при использовании доменного имени pollnote.com.
Понимание проблемы
Cloudflare предоставляет прокси-сервис, который защищает ваш сайт и управляет трафиком, однако он не перенаправляет SSH-порты (обычно это порт 22). Когда вы подключаетесь к вашему серверу по IP-адресу, соединение устанавливается напрямую. Однако если вы используете доменное имя, Cloudflare обрабатывает запрос через свои серверы и не позволяет SSH-соединения.
Решение проблемы
Чтобы обеспечить доступ по SSH через доменное имя, следуйте этим шагам:
Создайте поддомен для SSH:
Войдите в панель управления Cloudflare.
Перейдите на вкладку DNS и добавьте запись типа A (или CNAME):
Type: A (или CNAME)
Name: ssh.pollnote.com (или любое другое название, которое вы выберете)
Value: ваш IP-адрес сервера (или адрес другого хоста для CNAME)
TTL: Automatic
Proxy status: DNS только (зеленая иконка)
Это позволит установить соединение напрямую с вашим сервером, минуя защиту Cloudflare.
Проверьте настройки DNS:
Используйте команду dig для проверки актуальности настроек DNS. Убедитесь, что ваш поддомен разрешается в правильный IP-адрес.
dig ssh.pollnote.com
Осуществите подключение по SSH:
После настройки вы сможете подключиться к серверу с использованием следующей команды:
ssh -i ~/.ssh/id_rsa [email protected]
Если вы использовали порт, отличный от стандартного, укажите его с помощью параметра -p:
ssh -i ~/.ssh/id_rsa -p ПОРТ [email protected]
Дополнительные рекомендации
Безопасность: Лучше используйте что-то менее очевидное вместо ssh в поддомене, чтобы уменьшить риски атаки. Примером может служить secret-circus-monkey.pollnote.com.
API Cloudflare: Если вы хотите извлекать реальный IP-адрес через API Cloudflare, можно написать скрипт на Bash с использованием curl и jq, который получает реальный IP-адрес вашего сервера для последующего SSH-подключения.
Тестирование: После любой настройки обязательно тестируйте соединение, чтобы убедиться, что все работает корректно.
Заключение
Следуя вышеописанным шагам, вы сможете наладить доступ к вашему серверу через SSH, используя доменное имя, даже с учетом защиты от DDoS и других механизмов Cloudflare. Обеспечение безопасного подключения должно быть в приоритете, и создание уникального поддомена для SSH является одним из способов достижения этой цели.