Назад | Перейти на главную страницу

SSH на сервер с xargs

У меня довольно простая проблема, которую я пытаюсь решить здесь. Я постоянно запускаю команду (host) для доменов, чтобы получить их IP-адреса, затем (host) снова на этих IP-адресах, чтобы получить их 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

Проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю ssh через xargs, я получаю SSH-соединение на удаленный сервер, но с ошибкой [tcgetattr: Invalid argument]. Я сижу в оболочке удаленного сервера, но когда я пытаюсь запустить любую команду, она просто зависает, и в конце концов мне приходится нажимать Ctrl-C, чтобы выйти из нее.

Если я не использую (ssh -tt), я получаю ошибку [Псевдотерминал не будет выделен, потому что stdin не является терминалом]. Это кажется такой простой проблемой, поэтому я надеюсь, что кто-то, более знакомый с ssh через xargs, сможет сообщить мне, возможно ли это вообще.

Если вы используете оболочку, поддерживающую обратные кавычки или $()-стиль подстановка команд (большинство оболочек делают), то в вашем случае вы можете полностью отказаться от использования xargs, например:

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

(Я добавил -t флаги к host команды, чтобы гарантировать, что они выдают только 1 строку вывода.)