![通过 SSH 和域名访问我的服务器(使用 Cloudflare)](https://linux22.com/image/663675/%E9%80%9A%E8%BF%87%20SSH%20%E5%92%8C%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE%E6%88%91%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%88%E4%BD%BF%E7%94%A8%20Cloudflare%EF%BC%89.png)
我有一台服务器(例如 44.44.44.44)正在运行 Web 服务器。我已路由pollnote.com
到该服务器以访问我的 Web 服务器。一切正常。
为了访问服务器,我添加了我的公钥,.ssh/authorized_keys
这样我就可以无问题地登录。ssh [email protected]
当我像这样尝试时,问题就出现了:。终端什么都不显示,它等待我,直到我决定中止命令。ssh [email protected]
我需要做什么才能使用域名作为参考访问服务器?
更新
我应该提到,我正在通过 CloudFlare 访问服务器。也许这有关系……?
数据
➜ ~ dig pollnote.com
; <<>> DiG 9.9.5-9ubuntu0.1-Ubuntu <<>> mydomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56675
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;pollnote.com. IN A
;; ANSWER SECTION:
pollnote.com. 299 IN A 104.27.165.70
pollnote.com. 299 IN A 104.27.164.70
;; Query time: 54 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Thu Jul 30 19:12:38 CEST 2015
;; MSG SIZE rcvd: 73
➜ ~ ssh -vvv [email protected]
OpenSSH_6.7p1 Ubuntu-5ubuntu1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to pollnote.com [104.27.165.70] port 22.
答案1
当您通过 IP 地址连接时,SSH 连接会直接进入您的服务器,但如果您使用域名,则会经过 Cloudflare 防御。我的建议是使用direct.pollnote.com
(我认为 CloudFlare 会自动创建它,但人们经常会删除它)或添加您自己的别名ssh.pollnote.com
,然后禁用 CloudFlare 保护。
答案2
德图贝利斯的回答确实解决了这个问题。
友情修改,考虑使用除此以外的其他方法ssh.yourserver.com
,以便潜在攻击者更难识别您主机的 IP 地址。
例如,secret-circus-monkey.yourserver.com
。
例如,参见正确的服务器命名方案;值得注意的是作者关于攻击媒介的评论:
在文章中,我们提到,我们的命名方案还允许您通过仅公开显示短随机主机名而仅在内部网络上解析功能名称来防止无意的信息泄露。
答案3
你可以使用类似这里。
如果我尝试通过 SSH 连接到域,我们的 IP 将会显示出来并且这会导致问题(对于 ftp 之类的操作也会发生同样的情况)。
答案4
我找到了一个巧妙的方法。我使用 cloudflare API 创建了一个脚本,以获取我服务器的真实 IP,然后我可以使用该 IP 连接我的服务器。这样,cloudflare 上的所有地址都保持代理状态。
您需要拥有curl
并jq
安装(sudo apt install jq
)。创建您的API 令牌具有权限Zone.DNS.Read
。
#!/bin/bash
# connect via cloudflare API to get real IP of home server
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')
# use recovered IP Address to connect on server from remote.
ssh -i ~/.ssh/<YOUR_KEY_FILE> <USER>@"$IP" -p <PORT_NUMBER>
享受!