我在学校的服务器上有一个帐户,还有一台我有时需要使用的家用电脑。我已经交换了密钥,现在只有一个问题。虽然我的学校帐户有一个与之关联的名称“account_name@school”,但我的家庭网络没有。我的计划是有一个脚本,每小时检索我的家庭网络的 IP 地址,ssh'es 到我的学校帐户并更新我的 ssh 配置文件存储我的家庭网络的 IP 地址。
如何从 shell 脚本中检索家用计算机的 IP 地址?
PS这是一个明智的计划吗?
我在学校的服务器上有一个帐户,还有一台我有时需要使用的家用电脑。我已经交换了密钥,现在只有一个问题。虽然我的学校帐户有一个与之关联的名称“account_name@school”,但我的家庭网络没有。我的计划是有一个脚本,每小时检索我的家庭网络的 IP 地址,ssh'es 到我的学校帐户并更新我的 ssh 配置文件存储我的家庭网络的 IP 地址。
如何从 shell 脚本中检索家用计算机的 IP 地址?
PS这是一个明智的计划吗?
您有两个基本选择:
动态 DNS 地址(例如 dyndns.org)。设置它超出了 Stack Overflow 的范围,但它可能是适合您的 The Right Thing™。
使用http://checkip.dyndns.org/之类的工具报告您的外部 IP 地址,然后解析结果。
lynx -dump http://checkip.dyndns.org/ | awk '{print $NF}'
无论哪种方式,您都需要将路由器配置为允许 SSH 的入站访问,因此需要在Super User或Unix & Linux上询问更多信息。
我的http://ipcalf.com服务器支持基于标头或显式内容协商,这是一种奇特的说法,即如果您curl -H Accept:text/plain ipcalf.com
或curl -s http://ipcalf.com/?format=text
您应该以原始形式获取您的公共 IP 地址。
(“完整”文档和源代码在 github 上。)
您可以向http://automation.whatismyip.com/n09230945.asp发出请求,以从WIMI获取您的公共 IP 。这个命令:
ssh account_name@school "echo -n "$(wget http://automation.whatismyip.com/n09230945.asp -O -)" > some_remote_file"
会将您的家庭公共 IP 写入您在学校的主文件夹中名为“some_remote_file”的文件。使用 cron 设置它,您将可以从学校访问您家的路由器公共 IP。
如果您已经在路由器上设置了某种端口转发,以便您可以使用路由器 IP ssh 到您的家用计算机,那么您应该很高兴:)
我想出了一个更好的方法来获取 IP 地址,然后使用外部服务。我正在通过 SSH 连接到服务器;因此,服务器必须知道谁在通过 SSH 连接,所以我可以使用 who 或 pinky 之类的工具来找出谁在通过 SSH 连接。
这是获取登录计算机名称的命令。
echo $SSH_CLIENT | awk '{ print $1 }'