使用 xargs SSH 到服务器

Jac*_*obN 1 scripting linux ssh xargs

我有一个很简单的问题,我想在这里解决。我不断在域上运行 (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
Run Code Online (Sandbox Code Playgroud)

够简单了吧?一遍又一遍地做这件事很乏味,所以对于所有 Linux 我想通过自动化来加速它:

[root@box ~]$ host DomainIWant.com | awk '{print $4}' | xargs host | awk '{print $5}' | xargs ssh -tt
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我通过 xargs 调用 ssh 时,我确实通过 SSH 连接到远程服务器,但出现错误 [tcgetattr: Invalid argument]。我坐在远程服务器的外壳上,但是当我尝试运行任何命令时,它只是挂起,最终我必须按 Ctrl-C 才能摆脱它。

如果我不添加 (ssh -tt),那么我会收到一个 [Pseudo-terminal will not be allocation because stdin is not a terminal] 错误。这似乎是一个简单的问题,所以我希望有人通过 xargs 更熟悉 ssh 可以让我知道它是否可能。

Ste*_*day 5

如果您使用的外壳支持反引号或$()- 样式的命令替换(大多数外壳都支持),那么在您的情况下,您可以完全避免使用 xargs,如下所示:

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

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