パイプを介してIPを取得する方法は?

パイプを介してIPを取得する方法は?

私はすべてのローカルIPコレクションを使用し、特定のarp-scanシステムIPをMacアドレスにフィルタリングし、SSHを使用してその特定のシステムに自動的に接続します。パイプを介して次のコマンドを試しました。

 sudo arp-scan --localnet|grep 10|cut -c1-12|xargs ssh myuser@

ここの1cはgrep私のシステムのMACアドレスの開始文字です。

次のエラーを返します。

SSH:ホスト名を解決できませんでした:不明な名前またはサービス

xargs: ssh: 中断状態で終了しました。

答え1

使用パラメータ文字列フラグの置き換え

xargsの代替文字列フラグを使用する必要があります。たとえば、パイプラインの残りの部分が期待どおりに機能しているとします。

sudo arp-scan --localnet | grep 10 | cut -c1-12 | xargs -I{} -n1 ssh -tt myuser@{}

両方を参照してくださいパラメータそしてSSHこのコマンドが正しく機能するには、いくつかの追加フラグが必要です。特に注目すべき点は、SSHクライアントがパイプから標準入力を受け取るときにリモートホスト-ttにPTY割り当てを強制するためにフラグをSSHに渡す必要があることです。

コマンド置換とシェル変数の使用

あるいは、正確に単一のIPアドレスをキャプチャする場合は、結果をシェル変数にキャプチャし、正しいホストでSSHを呼び出すだけです。たとえば、Bashシェルを使用すると、次のようになります。

host_ip=$(sudo arp-scan --localnet | grep 10 | cut -c1-12)
ssh "myuser@${host_ip}"

このアプローチの最大の利点は、デバッグがより簡単であることです。ただし、マイレージは異なる場合があります。

答え2

  • 最初の問題は実行しようとしていることですssh myuser@ x.y.z.t(xyztは認識されたIPアドレスです)。動作しません。必要です(ネットワークとIPアドレスの間にスペースはありません)。試してみてください。ssh [email protected]myuse@sudo arp-scan --localnet | grep ... | sed -e 's/^/myuser@/' | xargs ssh

  • 2番目の問題は、ssh標準入力が端末ではないと不平を言って対話型セッションが確立されないことです。満足のいく状態を維持するには、sshコマンドオーバーライドでIPアドレスを選択する必要があります。

    ACCOUNTNAME=myuser
    MACADDRESS=00:50:56:3a:8d:1e
    ssh "$ACCOUNTNAME@$(
      sudo arp-scan --localnet |
      grep "$MACADDRESS" |
      cut -c 1-15
    )"
    

grep表示された内容は単なる例であり、実際に完全なMACアドレスを使用できることを願っています。

grep特定のMACアドレスに対応するIPアドレスが見つからない場合は、エラー処理コードを追加できます。

関連情報