web-dev-qa-db-ja.com

xargsを使用してサーバーにSSHで接続する

ここで解決しようとしている非常に簡単な問題があります。私は常にドメインで(ホスト)コマンドを実行してIPを取得し、次にそれらのIPで(ホスト)を再度実行してPTRを取得し、PTRで表されるサーバーにSSHで接続しています。

[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:無効な引数]が発生することです。私はリモートサーバーのシェルに座っていますが、コマンドを実行しようとするとハングし、最終的にはCtrl-Cを押してコマンドを終了する必要があります。

(ssh -tt)をタックしないと、[stdinは端末ではないため、疑似端末は割り当てられません]エラーが発生します。これは単純な問題のように思われるので、xargsを介したsshに精通している誰かが、それが可能かどうかを知らせてくれることを願っています。

1
JacobN

Backticks-または$()-style コマンド置換 をサポートするシェルを使用している場合(ほとんどのシェルはサポートします)、あなたの場合、このようにxargsを完全に使用することを避けることができます:

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

-tフラグをHostコマンドに追加して、1行の出力のみを出力するようにしました。)

5
Steven Monday