Poderosa 複数サーバー自動ログインマクロ SSH キー対応版
魔術師です。SSHクライアントのターミナルソフトとして Poderosa を使っています。TeraTerm と違ってバッチ処理は出来ませんが一応マクロ機能が付いているので Poderosa 複数サーバー自動ログインするマクロの SSH キー対応版を作りました。最新版では有償化してマクロ機能も外されているので古いバージョン 4.4.5 を利用しています。前から作りたかったのですがやっと手を付けました。単体のサーバーへのログインは出来るようなマクロは作っていましたが、サーバーの数が多くて何度も呼び出して実行する必要があって面倒くさいなと思っていたのです。サーバー側の SSH 設定は root ではパスワード認証ではログインできないように SSH キーでの認証のみログイン出来るように設定しています。完全 SSH キー認証にすれば安全だけどいざという時にログイン出来なくなってはいけないので root のみキー認証にしています。。sshd.confPermitRootLogin without-passwordPoderosa 複数サーバー自動ログインマクロ SSH キー対応版==========/*** 複数の接続を一気に行うマクロ* https://w.atwiki.jp/keiplus/pages/81.html* MultiAutoLogin.js* Poderosa マクロ で複数サーバーへドンドン接続しちゃう!方法 https://blog.gti.jp/post-159/*/import Poderosa;import Poderosa.ConnectionParam;import Poderosa.Terminal;import Poderosa.Macro;import Poderosa.View;import System.Drawing;import System.Threading;var env = new Environment();var ENCODE_TYPE = EncodingType.UTF8;var NEWLINE_CHAR = NewLine.LF;var SSH_PORT = 22;var hostList = new Array();var hostip = "192.168.0.1";var loginuser = "USER";var loginpw = "PASSWORD";var loginport = "22";//// サーバー設定//hostList[0] = new Array();hostList[0]['host'] = "hoostname"; // ドメイン OR IPhostList[0]['id'] = "root"; // ログインアカウントhostList[0]['pwd'] = ""; // ログインパスワードhostList[0]['authtype'] = 1; // 認証タイプ 0: パスワード 1: SSH キーファイルhostList[0]['key'] = "シークレットキーファイル名"; // 秘密鍵ファイルhostList[0]['title'] = "サブタイトル"; // タブのタイトルhostList[0]['port'] = 22; // SSHのポートを変更している場合は設定するhostList[0]['encode'] = EncodingType.UTF8; // エンコードがデフォルト値以外の場合設定するhostList[0]['newline_char'] = NewLine.LF; // 改行コードがデフォルト値以外の場合設定する//hostList[0]['commands'] = new Array(); // コマンド発行の場合必要(任意)//hostList[0]['commands'][0] = "pwd"; // コマンド1(任意)//hostList[0]['commands'][1] = "ls -lat"; // コマンド2(任意)hostList[1] = new Array();hostList[1]['host'] = "hostname"; // ドメイン OR IPhostList[1]['id'] = "root"; // ログインアカウントhostList[1]['pwd'] = ""; // ログインパスワードhostList[1]['authtype'] = 1; // 認証タイプ 0: パスワード 1: SSH キーファイルhostList[1]['key'] = "シークレットキーファイル名"; // 秘密鍵ファイルhostList[1]['title'] = "サブタイトル"; // タブのタイトルhostList[1]['port'] = 22; // SSHのポートを変更している場合は設定するhostList[1]['encode'] = EncodingType.UTF8; // エンコードがデフォルト値以外の場合設定するhostList[1]['newline_char'] = NewLine.LF; // 改行コードがデフォルト値以外の場合設定する//hostList[1]['commands'] = new Array(); // コマンド発行の場合必要(任意)//hostList[1]['commands'][0] = "pwd"; // コマンド1(任意)//hostList[1]['commands'][1] = "ls -lat"; // コマンド2(任意)hostList[2] = new Array();hostList[2]['host'] = "hostname"; // ドメイン OR IPhostList[2]['id'] = "root"; // ログインアカウントhostList[2]['pwd'] = ""; // ログインパスワードhostList[2]['authtype'] = 1; // 認証タイプ 0: パスワード 1: SSH キーファイルhostList[2]['key'] = "シークレットキーファイル名"; // 秘密鍵ファイルhostList[2]['title'] = "サブタイトル"; // タブのタイトルhostList[2]['port'] = 22; // SSHのポートを変更している場合は設定するhostList[2]['encode'] = EncodingType.UTF8; // エンコードがデフォルト値以外の場合設定するhostList[2]['newline_char'] = NewLine.LF; // 改行コードがデフォルト値以外の場合設定する//hostList[2]['commands'] = new Array(); // コマンド発行の場合必要(任意)//hostList[2]['commands'][0] = "pwd"; // コマンド1(任意)//hostList[2]['commands'][1] = "ls -lat"; // コマンド2(任意)//// ログイン処理//for (var i = 0; i < hostList.length; i++) { var ssh_port_num = SSH_PORT; if (hostList[i]['port'] != null && hostList[i]['port'] != SSH_PORT) { ssh_port_num = hostList[i]['port']; } var encoding_type = ENCODE_TYPE; if (hostList[i]['encode'] != null && hostList[i]['encode'] != ENCODE_TYPE) { encoding_type = hostList[i]['encode']; }var newline_char = NEWLINE_CHAR;if (hostList[i]['newline_char'] != null && hostList[i]['newline_char'] != NEWLINE_CHAR) { newline_char = hostList[i]['newline_char']; } var conn = connect(hostList[i]['host'], ConnectionMethod.SSH2, ssh_port_num, encoding_type, newline_char, hostList[i]['authtype'], hostList[i]['id'], hostList[i]['pwd'], hostList[i]['key'], hostList[i]['title']); if (hostList[i]['commands']) { if (hostList[i]['commands'].length > 0) { wait(conn, "$"); for (var j = 0; j < hostList[i]['commands'].length; j ++) { sendln(hostList[i]['commands'][j], conn); } } }}env.Util.MessageBox("処理終了しました!");function connect(host, method, port, encoding, newline_char, authtype, id, password, prikey, title) { var param = new SSHTerminalParam(method, host, id, password); if ( authtype == 1 ){ param.AuthType = AuthType.PublicKey; param.IdentityFile = prikey; } else { param.AuthType = AuthType.Password; } param.Caption = title+"["+host+"]"; param.Port = port; param.Encoding = encoding; param.TransmitNL = newline_char; var connection = env.Connections.Open(param); return connection;}function sendln(s, connection) { connection.TransmitLn(s);}function wait(connection, command) { Thread.Sleep(10); var res = connection.ReceiveData(); while(res.indexOf(command) == -1) { Thread.Sleep(10); res += connection.ReceiveData(); }}==========会社の元々はバイク友、今はパソコン友が珍しく魔術師の席まで来て第10世代 Core i5-10400 マシンを手に入れたと話をした。ドスパラの BTO マシンらしくて、5月連休に注文して入ったらしい15年ぶりのマシンの更新らしいけど、かなり速いらしい。そうだろうな、Core i5-10400 も 6C12T で狙ってた石なんだよねBTO で GPU も載っているので BTO もありだよなとは思っていました。こりゃ負けれんなあ。けれど世界的な半導体不足で値段が上がっていますので早く構成を確定しなければ。セールも近いしね。新しい Ryzen APU の発表があったけど内蔵 GPU の更新があっていいのだけど 8月出荷で遅いんだよね。新しい 4K ディスプレイが届きました。ViewSonic VX3211-4K-MHD-7 ブラック [31.5型ワイド液晶ディスプレイ(4K対応)]受け取るだけでも何日もかかってしまいました。さすが受け取った箱は巨大です。まだ出していません。ディスプレイの下にガラスのディスプレイの置き台を置いているのですが、これを外さないといけません。こんなの★期間限定ポイント10倍変倍★【送料無料】FITUEYES 机上台 モニター台 モニターライザー キーボード収納 幅385mm 内径300mm 高さ調整可能 透明 強化ガラス製 肩こり軽減 DVDレコーダー収納 ブルーレイレコーダー DT103801GC台があって少し高目なのですが大きな画面になると見上げる形になって疲れてはいけないので目の高さがディスプレイの上辺になるように調整しようと思っています。台の上にスピーカーとか Web カメラとかミニ PC とか色々と置いているので整理から始めないといけません。ディスプレイの上にも棚を設けてものがあるのでここに置いているものも整理しないといけません。【送料無料】キングジム 棚 ディスプレイボード 黒 DB-500-BK 【jan 4971660773428】設置はもう少し先になりそうですが初期不良の確認もしないといけません。昨日の晩は焼そばでした。ソフト麺の焼そばです。いつもながら野菜が山盛りで麺より野菜が多いと思ったのですが、火が通るとしんなりしていい感じになりました。フライパンで下ごしらえしてホットプレートで焼きながら食べました。案外パラッと焼けていて美味しかったです。なくなったネジ式のキーホルダーのネジは購入できることになりました。早速、代金を振込んで送ってもらいます。キリンの自販機で麦茶を現金を準備して買いました。LINE に接続してポイントが付きました。Amazon プライムデーが今年は 7/21-22 にあるみたいです。毎年 7月頭なので少し早いですね。これは気合いを入れねば。楽天モバイルの話180日間利用のない回線は強制的に解約されるようになったそうだこれは時々電源を入れて使わないといけませんね、0円維持も手間が掛かる。今日はオフィスの消毒当番も終わったのでリモートです。がんばりましょう。人気記事の一覧のあるトップへ楽天のサービス紹介ページへ飛ぶ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。