使用 xargs 通过 SSH 连接到服务器

使用 xargs 通过 SSH 连接到服务器

我有一个非常简单的问题,我想在这里解决。我不断地在域上运行 (host) 命令,以获取它们的 IP,然后在这些 IP 上再次运行 (host) 以获取它们的 PTR,然后我通过 SSH 连接到 PTR 中表示的服务器:

[root@box ~]$ host DomainIWant.com
DomainIWant.com has address 123.123.123.123

[root@box ~]$ host 123.123.123.123
123.123.123.123.in-addr.arpa domain name pointer vps2010.DomainIWantHosts.com

[root@box ~]$ ssh vps2010.DomainIWantHosts.com

很简单吧?一遍又一遍地重复这个过程实在是太乏味了,因此,就像所有 Linux 系统一样,我想通过自动化来加快速度:

[root@box ~]$ host DomainIWant.com | awk '{print $4}' | xargs host | awk '{print $5}' | xargs ssh -tt

我遇到的问题是,当我通过 xargs 调用 ssh 时,我确实可以通过 SSH 连接到远程服务器,但出现错误 [tcgetattr:无效参数]。我坐在远程服务器的 shell 上,但当我尝试运行任何命令时,它就会挂起,最终我不得不按 Ctrl-C 来退出。

如果我不添加 (ssh -tt),则会收到 [无法分配伪终端,因为 stdin 不是终端] 错误。这似乎是一个简单的问题,所以我希望更熟悉通过 xargs 进行 ssh 的人可以告诉我这是否可行。

答案1

如果你使用的 shell 支持反引号或$()-style命令替换(大多数 shell 都这样做),那么就您而言,您可以完全避免使用 xargs,如下所示:

ssh $(host -t PTR $(host -t A DomainIWant.com | awk '{print $4}') | awk '{print $5}')

(我-thost命令中添加了标志,以确保它们只发出 1 行输出。)

相关内容