仕事効率化ぼくが仕事でLinuxサーバ環境に接続して行う操作というのはだいたい決まっていて、コマンドでサーバの状態を確認ログをファイル出力してダウンロードサービスの設定変更と再起動SSHトンネル経由でDBアクセスのうちどれかを行うことが多い。今回はnode.jsでどこまで自動化できるかを試してみたい。事前準備ローカルのWindowsマシンでnode.jsプログラムを実行して、プログラム経由でLinux環境に接続して色々操作することを想定しているので、ローカルにnode.js環境をインストールしておく。この記事に載せてるサンプルはTypescriptで書いているけど、だいたいJavascriptとしても動くと思う。SSHでLinux環境に接続するまずはSSHで接続してコマンドを実行できる状態にしてみよう。SSHライブラリは「node-ssh」を使う。node-sshgithub.comPromise形式で実行できるのでasync/awaitですっきり書ける。下記はSSH接続して、lsコマンド実行して、切断するサンプル。ssh.dispose();}main();optionsで指定してるオプションはなくても良いのだけど、サービスの再起動なんかを行った時に切断後もサービスが起動したままにしたい時に指定が必要になるので、おまじない的に全部のコマンドにつけてる。コマンドの実行結果は戻り値として受け取ることができるので、ローカルでファイルに出力したりできる。リモートスクリプトの良いところ。下記のようにexecCommandメソッドを呼び出す。true}});sudoコマンドがパスワードを求めてきたらstdinで指定したパスワードが入力される。node-sshについてはここまでのことを押さえておけば大抵のコマンドを実行してその結果を受け取ることができる。鍵認証でも接続もできるし、node-sshの機能では足りない場合は、node-sshが参照しているssh2ライブラリを使えばもっと色々できる。github.com試してないけどSFTPでのファイル転送もできるみたい。SSHトンネル経由でLinux上のDBにアクセス続いて、リモートサーバ上で動作しているデータベースに接続してみよう。SSHトンネルを使用する。WindowならPuttyとかでSSHトンネル設定をしておいてからpgadminとかでトンネルのローカルポートに接続して操作する、みたいなことはよくやると思うが、これをnode.jsで実現するイメージ。Puttyで作成したSSHトンネルを使ってnode.jsからDB接続しても良いし、node.jsのSSHトンネリング用ライブラリを使ってnode.jsだけでSSHトンネルを作ってDBに接続する、ということもできる。今回はnode.jsで完結させてみよう。上で紹介したssh2ライブラリをトンネリング用に拡張したライブラリを使う。pgを使ってPostgreSQLデータベースに接続する。});}main();上記のスクリプトは最後にトンネルを終了(tnl.close())してるので処理完了後にプログラム終了する。トンネルを終了しなければずっとトンネルを開いたまま待機状態になるので、node.jsスクリプトでトンネルだけ開いておいて、pgadmin等他のアプリでトンネルを利用する、ということもできるかも。node.jsでトンネル経由でDBにアクセスする場合は下記のような形で処理を追加する。});}main();トンネルのローカルポートとDB接続時のポート番号を合わせるだけ。この方法を使えば、DBの実行結果をローカルに保存したり、ローカルのExcelから読み込んだ内容をDBに登録したりできる。おわり今回はSSH経由でLinuxサーバを操作する方法を2つ紹介した。自動化の幅を広げる役に立つと思う。blog.honjala.n...2018-08-17node.jsでWebスクレイピングして取得データを保存するnode.jsでデータ収集のためのWebスクレイピングを行う。はてなブログProおいしいものを食べてぐーたらすることしか考えていない、2児の父。noteにもエッセイを載せてます。Versionnoteはてなブログをはじめよう!piro_sukeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。