如何使用已知密钥通过 SSH 连接到未知主机名?

use*_*010 4 networking ssh

我有一台通过 VPN 连接到公司网络的机器。当我连接到 VPN 时,它总是给我一个不同的主机名和 IP 地址。主机名总是远程-[ip 地址的最后一个八位字节]。每当我想通过 SSH 连接到我的机器时,我首先必须运行“主机名 -A”以查看主机名是什么。问题是,当我需要访问计算机时,我并不总是知道我的主机名是什么。(如果我去计算机所在的物理位置查找主机名,则不需要 SSH。)

我可以使用 SSH 并尝试子网中的每个主机名/IP,直到找到与正确密钥文件匹配的主机名/IP 吗?


我正在使用带有 cygwin 的 Windows 笔记本电脑(也通过 vpn 连接)通过 ssh 连接到 Ubuntu 12.04 机器。我不知道为什么当我连接到 vpn 时会得到一个不同的主机名,但它是一个公司网络,所以他们可以做任何他们想做的事情。

Mat*_*ark 5

这里有几个选项,从最简单到最复杂列出。不出所料,这一切都很好,更好,最好。

  1. 使用 crontab 以某个时间间隔使用您的主机名更新远程系统上的文件。
    创建/编辑 Crontab: crontab -e
    添加 Crontab 条目:要创建仅在周末的工作日每小时更新文件的作业,请使用以下示例:

    00 09-18 * * 1-5 ssh usr@example.com "echo $(hostname -A) > ubuntuhost.name"

  2. 使用 crontab 每隔一段时间将您的主机名通过电子邮件发送给自己。
    安装Mailutils: sudo apt-get update && sudo apt-get install mailutils注意:如果由mailutils 安装支持,选择'internet connection',应该是第一个选项。
    创建/编辑 Crontab: crontab -e
    添加 Crontab 条目:要创建一个作业,该作业仅在周末工作日每小时向您发送电子邮件,主题行为主机名,请使用以下示例:

    00 09-18 * * 1-5 mail -s "Ubuntu $(hostname -A)" you@you.com < /dev/null 

  3. 每当连接发生变化时,使用 NetworkManager Dispatcher 通过电子邮件发送您当前的主机名。
    将此脚本放在 /etc/NetworkManager/dispatcher.d 中,将其命名为“50emailhostname”

#!/bin/sh -e
#确保我是可执行的(chmod 775)

echo "interface: $1, action: $2" >> /tmp/interface.log #debug

if [ "$1" = "eth0" ] && [ "$2" = "up" ]
然后
  mail -s "Ubuntu $(hostname -A)" you@you.com > /tmp/interface.log #debug
别的
  回声“假”>> /tmp/interface.log #debug
菲

出口

笔记:

  • 您可能需要将脚本中的“eth0”更改为“vpn0”或其他内容,具体取决于您的客户端
  • 您可能需要将“up”更改为“vpn-up”
  • 使用调试语句来获得所需的行为!
  • tail -f /tmp/interfaces.log 在单独的窗口中查看它在做什么
  • 根据需要使用 service network-manager restart 重启网络服务
  • 完成后注释掉调试语句
  • 您可以使用类似的方式获取 IP 地址而不是主机名
    $(ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}')