brand new note

インフラエンジニアを目指す大学院生のメモ

ssh先の端末出力は操れない?

色々あって親となるサーバからssh先の標準出力を動かせないかなーと試行錯誤していたんですが、できなかったという話です。 まあセキュリティ的に無理だろうということは1秒考えれば分かるのですが、色々回り道したことをメモします。

いじったもの

ttyコマンド

f:id:frazz:20171023231536p:plain

今自分は端末の何番を使ってコマンドを打っているのかが見られます。画像なら2番ですね。/dev/pts配下は端末を制御する場所になっているので、コマンドやログの出力結果をどの端末にリダイレクトするか、みたいなことができます。以下が参考になりました。

ttyとかptsとかについて確認してみる - Qiita

ssh -t とは

ssh 端末 出力」 みたいな検索をしていたのでたどり着いたんですが、今回は関係ありませんでした。 多段sshというのかな? 初めて知ったんですが、「踏台サーバの先にあるいじりたいサーバ」に一発で入りたいときには、踏台ぶんの端末を一時的に割り当てる-tオプションが使えるそうです。

sshで踏み台経由時のショートカット - Qiita

sshの実行結果は大体実行元が出力する

$ ssh [user@IP_address] [command]

このcommand部はもちろんssh先のものとして実行されるんですが、コマンドを打った時のプロセスは親のサーバにまとめて入っています。

何もしなければ実行結果の標準出力も親サーバにまとめて入ってきます。ログファイルを生成しても、保存されるのは親となるサーバです。これを実行先のサーバで出力したいというイメージがあったんですが、どうやってもできませんでした。かろうじて操れたのはwallコマンドくらいです。

なので実行結果をログに残して、親サーバの端末を実行先のサーバ分複製し、保存したログを端末毎に出力させて事なきを得ました。

$ ssh [user@IP_address] [command] > hoge[x].log
$ cat hoge[x].log > /dev/pts/[y]

本当は間にlogの成型とかありますが、解決策のイメージはこんなんです。

おわりに

この一件でsshとか端末の仕組みとかログ成型とかに慣れてきた感じはしますが、我ながら理解しづらい文章になってる気がします。ご指摘あればよろしくお願いします。