状況
Wiresharkを使用してサーバーの1つでトラフィックを分析したいのですが、サーバー自体にWiresharkをインストールしたくありません。 Wiresharkがインストールされているローカルマシン(Ubuntu)にSSHで pipe tcpdump traffic できることを理解しています。
問題
Rootアカウントが無効になっているため、サーバーにログインできません。私はSudo権限を持っていますが、サーバーにログインすると、コマンドSudo tcpdump
動作しません。以下のコマンド(Sudoの有無にかかわらず)は機能しません。
$ ssh [email protected] "Sudo tcpdump -s 0 -U -n -w - -i eth0 not port 22" > /tmp/remote
質問
これを機能させる方法はありますか?もしそうなら-どのように?
サーバーでSudoを使用してこのコマンドを実行し、最初にデータをキャプチャしてから、結果のファイルをワークステーションに送信してデータを確認できます。
Sudo tcpdump -i eth0 -s 65535 -w /tmp/wireshark
Sudo
がないと、コマンドにはデバイスをキャプチャする権限がありません。
tcpdump:eth0:そのデバイスでキャプチャする権限がありません
しかしSudo
の場合はそうですが、ssh
の後に実行されるため、リモートサーバーでSudo
のパスワード入力を取得することはないため、ソリューションは-S
(man Sudo
)とパイプを使用しますSudo
のパスワードは次のとおりです。
ssh [email protected] "echo Sudo_password | Sudo -S tcpdump -s 0 -U -n -w - -i eth0 not port 22" > /tmp/remote"
一方では、これはSudo
パスワードpromtsを取得しない自動化に適しています。完全に自動化されたコード/スクリプトを使用するには、sshpass -p password ssh...
を追加します。
ただし、セキュリティの観点から推奨されないssh
セッション中にオープンテキストとして提供されたSudoパスワードを他の人が簡単に読み取ることができるサーバーでは。したがって、Sudo
とssh
を組み合わせて安全に使用するには、ssh -t
を使用します
-t
を使用すると、examplessh "Sudo command"| command
に対してssh -t server "cd path/to/directory && Sudo"|grep "text"
をパイプすることはできませんが、IS -Sを使用してパスワードをエコーすることで可能です。例:ssh server 'echo password | Sudo -S ls -l'| grep 'a'