日本語│English
       

株式会社アイオーアーキテクトは、オープンソースなどを活用してシステム運用を最適にご提供します。

  • ホーム
  • OTRS
  • サービス内容
  • 会社案内
  • ラボノート
  • お問い合わせ
  1. HOME
  2. ラボノート
  3. OSS

ラボノート

2021/12/22 平見知久
Tweet
gitレポジトリのお引越し

手持ちの雑プロ等の野良gitレポジトリを整理したくて、gogsを導入してみました。レポジトリ管理であれば言わずとしれたGitHubやAWSのCode commitあたりが有名どころでしょう。が、人様にお見せできないような雑なコードをGitHubで晒すのもアレですし、gitlabあたりはさすがに大げさすぎます(メモリ4GBきっちり持ってくのはきついというか、別のサーバに割り当てたい)。そういう観点でいくとgogsはお手軽でサーバのメモリ的にも優しくていい感じです。

で、手持ちのレポジトリを放りこんでいくのですが、ブランチやタグをちまちま指定していくのはやりたくないところです。漏れも怖いですし一括でやって欲しい。

ということで軽く調べたらちゃんとありました。cloneのときに–mirrorオプションをつけて引っ張ってきます。

git clone --mirror git@XXproject.git

このときcloneしたものはbare形式になります。で、移動先にレポジトリを作っておいて、pushするときも–mirrorをつけます。

cd XXproject.git ; git push --mirror git@dst:project.git

git remote add originとかせずにそのままレポジトリを指定します。これで全部のブランチ・タグもまとめて新しいレポジトリに追加されます。

さすがgit、よくありそうなことはちゃんとあるところが素敵です。

ちなみにgogsの場合、これをGUIからやってくれる移行機能がありましたので今回はそっちで移行してしまいましたが、–mirrorつけるやり方多分どのサービスでも共通で行けると思いますのでメモ兼ねて記事にしておきます。

 

2021/12/16 平見知久
Tweet
Log4j JndiLookupを抜いたときの挙動

ここのところホットなLog4jで見つかった脆弱性ですが、Log4j バージョン2.10より前のときの対策で、「JndiLookupクラスをクラスパスから削除する」というのを見て、ぱっと直感的に「抜いて大丈夫なのかな?なんか変な挙動起こさないかな?」と疑問に思ったので軽くソースを覗いてみました。

ちなみにOTRS, OTOBOはperlとJavascriptで書かれたアプリですのでLog4J(というかJava)の脆弱性の影響は受けません。ただ、OTOBOでは検索の高速化の機能のためにElasticsearchと連携できるようになっています。ElasticsearchはJavaでLog4jも使用していますので影響を受けることになります。また、OTRSでも弊社独自で用意したElasticsearch連携のアドオンが存在しており、その関連で気になった次第です。

お断り: 軽くソースを覗いた内容ですので、その真正性はあくまでご自身でご判断ください。本記事を信じて行ったこと/行わなかったことに対するいかなる責任も負いませせん。テストは大事です。

ソースは諸々の事情から、Log4j 2.8.2を使っています。

展開してgrepすると、問題のJndiLookupはlog4j-core.jarの、org/apache/logging/log4j/core/lookup/JndiLookup.javaが該当します。同列のlookupディレクトリを見ると、AbstractLookupを筆頭にDateLookupとか、EnvironmentLookup, JavaLookup等と並んでいますので、おそらくAbstractLookupを基底クラスにしたプラグインっぽい実装になっていそうです。

JndiLookup.javaを見てみると、クラスの出だしが次の通り。

@Plugin(name = "jndi", category = StrLookup.CATEGORY)
public class JndiLookup extends AbstractLookup {

やっぱりAbstractLookupを基底にして、まんまPluginというアノテーションついていますので、扱い的にはプラグイン、と。

そうするとどこからロードしているかが気になりますのでソースに対してgrepかけてみると、テストコードやドキュメント類を除くとorg/apache/logging/log4j/core/lookup/Interpolator.javaがクラスを呼んでいます。

public Interpolator(final Map<String, String> properties) {
  this.defaultLookup = new MapLookup(properties == null ? new HashMap<String, String>() : properties);
  // TODO: this ought to use the PluginManager
  lookups.put("log4j", new Log4jLookup());
  lookups.put("sys", new SystemPropertiesLookup());
  lookups.put("env", new EnvironmentLookup());
  lookups.put("main", MainMapLookup.MAIN_SINGLETON);
  lookups.put("marker", new MarkerLookup());
  lookups.put("java", new JavaLookup());
  // JNDI
  try {
    // [LOG4J2-703] We might be on Android
    lookups.put(LOOKUP_KEY_JNDI,
    Loader.newCheckedInstanceOf("org.apache.logging.log4j.core.lookup.JndiLookup", StrLookup.class));
  } catch (final LinkageError | Exception e) {
    handleError(LOOKUP_KEY_JNDI, e);
  }
  // JMX input args

他のLookupプラグインはともかく、JndiLookupについてはエラーハンドリングされていて、クラスが読めなかったらhandleErrorで処理しているみたいです。JavaLooupクラス等を抜いてしまうとロード時にエラーで落ちますが、このコードの書き方はない場合にはないなりに動かそうという書き方です。

handleErrorはというと、特に落ちたりせずに警告ログだけ出して終わっています。

private void handleError(final String lookupKey, final Throwable t) {
  switch (lookupKey) {
  case LOOKUP_KEY_JNDI:
    // java.lang.VerifyError: org/apache/logging/log4j/core/lookup/JndiLookup
    LOGGER.warn( // LOG4J2-1582 don't print the whole stack trace (it is just a warning...)
      "JNDI lookup class is not available because this JRE does not support JNDI." +
      " JNDI string lookups will not be available, continuing configuration. Ignoring " + t);
    break;

ちなみに、大本のInterpolatorについてはどこから呼ばれてるかというと、何か所かありますが、org/apache/logging/log4j/core/config/AbstractConfiguration.java あたりでクラスのメンバ変数の初期化でばっちり呼ばれています。

private final StrLookup tempLookup = new Interpolator(properties);

AbstractConfigurationの名の通り、Log4Jの設定の基底クラスですから、ライブラリの初期化さえ通ってしまえばまずまず問題はなさそうです。

まとめると

  • 問題を起こしているJndiLookupクラスについてはプラグインの1種として扱われている(=必須機能として扱われていない)
  • もともと存在しない場合でも大丈夫なようなコードになっている
  • ライブラリの初期化さえ通ってしまえば後で問題になる可能性は低い

ということで、提示されている対処通り、「JndiLookupクラスをクラスパスから削除する」という対処で問題なさそうということで個人的には納得です。

ちなみに、クラスパスを削除するといってもJndiLookup.classはlog4j-core.jarの中に入っていますので、実質jarから該当クラスを抜くという操作になります。

いくつか思いついたり探したりした中ではjarは実質zipファイルですので、

# zip -d log4j-core-2.8.2.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
 
あたりが楽でしょうか。jarを直接書き換えますので操作前の元ファイルの保全と変更後の動作確認はお忘れなく。
 
OTRS、OTOBO、Zunuyとしての対策は、保守サポートのFAQに掲載しておりますので、こちらをご参照下さい。

2017/12/25 桜井耕造
Tweet
Google Homeによる音声で家電操作(IoT)

誰もがリモートで家電を操作したり、音声で動作させたりする夢の環境にしたいと思ったりすると思うので、現実の技術でどこまで出来るかを書いてみようと思う。(OTRSネタではなくて、すみません。)スマートフォンやGoogle Homeなどから家電製品を操作するためには、スマート家電コントローラが必要になる。Clova WAVEのようにスマート家電コントローラが内蔵されているものもあるが、Google HomeやAmazon Echoなどは、スマート家電コントローラを購入する必要だ。簡単にいうと、エアコン、TV、ビデオ、照明などの赤外線リモコンをこのスマート家電コントローラに記憶させて、このコントローラが代替して、命令するのだ。この設定は、どの機器もスマートフォンで実施する。お持ちのAIスピーカーと連携可否や簡単な特徴を纏めてみたので、ご参考に。(2017年12月25日現在)

スマートコントローラ名 価格  特徴
Nature Remo
製造元:Nature, Inc.(日本)
¥13,000 2017年10月16日発売
・Google Assistant対応(Google Home)
・AmazonAlexa対応(Amazon Echo)
・家電のリモコンから出る赤外線を登録し、スマートフォンで操作管理
・応答がどの機器よりも早いらしい。
・iRKitの後継機で赤外線出力を強化し飛距離を改善した(プログラミング不要)
・iOS10.0以降、Android 5.0以降の機種で設定
※この製品は入手に予約してから1〜2ヶ月ほどかかる。
iRKit
製造元:maaash.jp(日本)
¥7,700(Amazonにて) 2014年1月15日発売
・Google Home対応
・AmazonAlexa対応
・プログラミング要
・家電のリモコンから出る赤外線を登録し、スマートフォンで操作管理・iPhoneアプリで設定
REX-WFIREX2
製造元:ラトックシステムとソフトバンク C&S
¥8,000 2017年8月2日発売
・AmazonAlexa対応(Amazon Echo)
・家電のリモコンから出る赤外線を登録し、スマートフォンで操作管理
・「REX-WFIREX1」より赤外線出力を強化し飛距離を改善した
・iOS8.4以降、Android 4.4以降の機器で設定
RS-WFIREX3
製造元:ラトックシステムとソフトバンク C&S
¥7,560(税込) 2017年12月1日発売
・AmazonAlexa対応(Amazon Echo)・Google Assistant対応予定・家電のリモコンから出る赤外線を登録し、スマートフォンで操作管理
・iOS8.4以降、Android 4.4以降の機器で設定
eRemote RJ-3
Broadlin(中国)
¥9,617(価格.comにて) 2015年11月18日発売
・Google Home対応
・AmazonAlexa対応・家電のリモコンから出る赤外線を登録し、スマートフォンで操作管理
eRemote mini
Broadlin(中国)
¥6,980(Amazonにて) 2016年11月1日発売
・Google Home対応
・AmazonAlexa対応
・家電のリモコンから出る赤外線を登録し、スマートフォンで操作管理
iRemocon
製造元:Glamo(日本)
¥22,400(Amazonにて)  2016年12月8日発売
・Google Home対応
・AmazonAlexa対応
・Apple Watchから家電をコントロール
・iPhoneアプリで設定
動作端末はこちら

Nature Remoについて

私は、スマート家電コントローラの中で反応速度が一番早いと言われる「Nature Remo」を購入してみた。発売日に予約したので、11月初旬ぐらいに納品されてきた。使ってみると、iPhoneのボタンを押して命令したり、Google Homeで命令してから、スイッチが入るまでの時間がかかることが気になる。大体2〜5秒ぐらいかかるのだろうか。リモコンだと瞬時に切り変わるので、数秒でも遅いと気になるかもしれない。あと、Nature Remoは家電から赤外線が届く範囲に置く必要があるので、私はプリンターに貼ってしまった。(ちなみに、近日中にIFTTTを介さずにGoogle Homeに直接接続出来るようになるらしいです。)

NatureRemo1

リモコンの操作登録(Nature Remo)

①iPhoneで「Remo」アプリをダウンロード

②WiFiに接続

③リモコンボタンを登録

以下の記事の通り、1つずつリモコンのボタンごとに赤外線をかざして登録します。以下のURLを参考にすると良いです。

http://www.itmedia.co.jp/pcuser/articles/1711/30/news058.html

NatureRemo3 NatureRemo2

ここまでの設定で、iPhoneで登録したリモコンの操作が出来ます。Google Homeから実行したいときは、IFTTTの設定が必要です。

IFTTTの設定

IFTTTの設定方法は、このURLを参考にすると良いです。先にNature Remoでリモコン操作の登録をしないと設定できません。IF文でGUIで動作条件を設定していく。”that”で”Nature Remo”の登録をすれば、家電を操作出来るようになります。

http://nature.global/jp/ifttt-setup/

まとめ

「電気をつけて」と音声で命令を出してから、照明が点灯するまで3〜4秒ほどかかる。リモコンで操作する方が明らかに早いけど、リモコンを探す手間を考えるとすごく便利です。スマートコントローラによって、レスポンス時間が違うようなので、最新の機器を使った方が良さそうだ。また、近日中にNature RemoからIFTTTを介さずにGoogle Assistantに命令できるようになるみたいで、今後対応済みのファームウェアにアップグレードすれば、もう少しレスポンスが早くなることが予想される。

2017/12/18 桜井耕造
Tweet
Google HomeからOTRSのチケット作成

AIスピーカーについて

本年秋ぐらいからAIスピーカーと言われる機器が注目されている。ほぼ各社の製品が出揃い、何ができるか、違いについて纏めてみた。以下の表をご覧下さい。(2017年12月18日現在)

AIスピーカー名 販売会社 価格 特徴
Google Home Google 定価:15,200円 ・2017年10月6日発売
・音楽(Play music)の再生(※1)
・ニュース・ラジオ・Podcastの再生(※1)
・天気予報(※1)
・アラーム・タイマー(※1)
・スケジュールを確認(※1)
・お店の場所や行き方を探す(※1)
・Android携帯を探す(※1)
・Bluetoothスピーカーとして利用(※1)
・GoogleアシスタントからIFTTTに連携(※1)
IFTTTに連携ができれば、家電操作(IoT)など色々なことが出来て、メールなどのメッセージを送信できる。
・Chromecast連携(※1)
・今後Nature Remoと直接連携が可能になる。(将来)
Google Home mini Google 定価:6,480円 ・2017年10月23日発売
・Google Homeに比べてスピーカー性能(音質)は劣る
・機能はGoogle Homeと同じ(※1を参照)
Amazon Echo Plus Amazon 定価:17,980円 ・2017年11月15日発売
・Amazon AlexaからIFTTTに連携
・Fire TV連携予定
・Amazon Echoよりも音質(高音)が良い
・スマートホームハブ機能が搭載・上記以外はAmazon Echoと同じ機能(※2を参照)
Amazon Echo Amazon 定価:11,980円
(Prime会員7,980円)
・2017年11月15日発売
・音楽(Prime Music、Amazon Music Unlimited、dヒッツ)再生(※2)
・ラジオ(TuneIn、radiko)再生(※2)
・カレンダー(Googleカレンダー、Office365、Apple iCloud)の予定の読み上げ(※2)・すき家のお弁当注文、スシローの持ち帰り注文(※2)
・Bluetoothスピーカーとして利用(※2)
・アラーム・タイマー・リマインダー(※2)
・Alexa対応スマート家電連携(※2)
・Amazon AlexaからIFTTTに連携(※2)
・今後Nature Remoと直接連携が可能になる。(将来)
Echo Dot Amazon 定価:5,980円 ・2017年11月15日発売
・上記以外はAmazon Echoと同じ機能(※2を参照)
Clova wave LINE 定価:14,000円
2018年1月31日までの期間限定定価:12,800円
・2017年10月5日発売
・音楽(LINE Music)再生(※3)
・ニュース(LINE News)読み上げ(※3)
・ラジオ再生(※3)
・赤外線による家電操作(※3)
・LINEの送信・読み上げ(※3)LINE連携が特徴!
・カレンダー(Google Calnder)の予定の読み上げ(※3)
・おしゃべり(連続会話)(※3)
・Bluetoothスピーカーとして利用(※3)
・内蔵スマート家電コントローラ
(Amazon Alexa/IFTTT未対応)
・Google Homeより音響が良い。
Clova Friends LINE 定価:8,640円 ・2017年12月14日発売
・Clova waveに比べてスピーカー性能(音質)は劣る
・LINE通話不可
・上記以外はClova waveと同じ機能(※3を参照)
LF-S50G ソニー オープン価格
(ソニーストアで24,880円)
・2017年12月9日発売
・Googleアシスタントを搭載したスマートスピーカー
・機能はGoogle Homeと同じ(※1を参照)
・防水、音響が良い。
G3 VC-GX30 ONKYO オープン価格
(価格.comで24,434円)
・2017年11月30日発売
・Googleアシスタントを搭載したスマートスピーカー
・機能はGoogle Homeと同じ(※1を参照)
・音響が良い。
AISonar TIS 未定 ・未販売
・議事録作成ができる。

音楽を楽しみたいならONKYOのG3 VC-GX30、風呂や台所で利用したいならソニーのLF-S50G、LINEを簡単にメッセージ送信した位ならLINEのClova wave、IoTとして家電を操作したいならGoogle HomeやAmazon Echoというように用途により選択すると良いのかもしれない。

Google Homeについて

まずは、色々と開発すれば実現出来そうなGoogle Homeについて、触ってみた。Google Homeの設定は、Google AssistantというサービスでGmailのアカウントでログインして設定する。従って、Webで設定が可能で、iPhoneやAndroidでもアプリがあるので、設定が可能です。発売日に私が購入した某量販店で「Androidがないと設定出来ません!」と言われたがそんなことはない。

Google Home

音楽を再生したい時はPlay Musicと連携する設定をGoogle Assistantの設定をすることで、流行りの曲などを流すことが出来る。このGoogle Assistantの機能のみだけでは、家電操作やメール送信、Line送信などが出来ない。それを可能にするのがIFTTT(イフト)というWebサービスで、Google Homeはサポートしている。IFTTTは、各種外部サービスやIoTデバイスを連携させるプラットフォームで、「if~then」という簡易なプログラミング(レシピ)により、動作条件、アクションを定義することで、インターネット経由で動作させることが出来る。IFTTTで連携出来るWebサービスは、一部ですが次のようなものがある。

IFTTT1

Google HomeからOTRSへメール送信

Google HomeとOTRSを連携出来ないかなと思い、簡単に出来そうなGoogle Homeへ言った内容をOTRSでチケット生成する仕組みを作ってみたので、簡単に実現方法を紹介する。

①IFTTTにログインする。

②上記の「My Applets」タブを選択し、「New Applet」を押下します。

③「this」を押下します。

IFTTT2

④「Choose a service」で「Google Assistant」と入力して、「Google Assistant」のアイコンを押下します。

⑤「Say a simple phrase」のアイコンを押下します。

IFTTT3
⑥次の項目を入力して「Create trigger」を押下します。

What do you want to say 動作のトリガーとなる言葉を定義します。ここでは、Google Homeで受信した言葉です。
What’s another way to say it?  2つ目の動作のトリガーとなる言葉を定義します。
And another way? (optional)  3つ目の動作のトリガーとなる言葉を定義します。
What do you want the Assistant to say in response?  動作トリガーを認識した時にGoogle Homeが応答する言葉です。
Language 「Japanese」を選択

IFTTT4

⑦「that」を押下します。

IFTTT5

⑧「Choose a service」で「Gmail」と入力して、「Gmail」のアイコンを押下します。

IFTTT6

⑨「Send an email」を押下します。続いて、「Finish」を押下すると設定完了です。

IFTTT7

以上で、OTRSにメール送信されて、チケットを生成することができました。もう少し細かい設定をすれば、システム管理者が障害内容を口頭で簡単にチケットを作成したりできそうです。

次回以降で家電製品をNature Remoに登録して、Google Homeから家電製品を操作する方法をやってみようと思う。

2016/05/30 桜井耕造
Tweet
SSHのパスワード認証と公開鍵認証の併用

通常の運用では、セキュリティ強化のため、公開鍵認証を利用していることが
多いかと思います。しかし、どうしても特定のアカウントのみパスワード認証
を使用したい時があったりしたことはないでしょうか?
そのような時にパスワード認証と公開鍵認証の併用する設定例を紹介します。

testuserはパスワード認証、それ以外のユーザーは公開鍵認証の設定です。

# cd /etc/ssh/
# cp -ip sshd_config sshd_config.20160513
# vi sshd_config
以下のように設定値を変更する。
---
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys
PasswordAuthentication no
パスワード認証したいユーザー(testuser)の設定をする。
Match User testuser
  PasswordAuthentication yes
---

設定を反映させます。
# service sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

これで、testuserのアカウントのみパスワード認証でssh接続が可能になります。

2016/02/29 平見知久
Tweet
Windowsでポートフォワーディングする

とある案件でWindowsでポートフォワーディングを行う必要がありましたのでやり方含めてご紹介しておきます。

OS: Windows 2008R2
やりたいこと: Windowsサーバにポート中継をさせて、特定セグメントからのアクセスを別セグメントの特定マシンへの通信に振り替えさせる

screenshot

 

Linuxですとiptablesあたりを駆使すればそれなりに簡単にできてしまいますし、SSHポートフォワードなんて手もあります。ですが今回は相手はWindows。制約上SSHポートフォワードもNGということでなんかアプリをいれないと駄目かなぁと思って調べていたのですが、実はWindowsのみでポートフォワードすることができます。

ポートフォワードを行うにはnetshコマンドを使用します。
Windowsサーバ(192.168.50.50)の8080ポートを外部サーバ(ここでは192.168.100.100とします)のポート80に転送したい場合、コマンドプロンプトを管理者権限で起動して、以下のように入力します。(画面では2行になっていますが実際には1行で入れます)

> netsh interface portproxy add v4tov4 listenport=8080 listenaddr=192.168.50.50
connectport=80 connectaddress=192.168.100.100

これで、他のマシンからWindowsサーバ(192.168.50.50:8080)へアクセスすると、Windowsサーバ経由で外部サーバ(192.168.100.100:80)に接続できるようになります。

 

また、netshからはshow allで現在の状態を確認することが出来ます。

> netsh interface portproxy show all

 

ちなみに削除する場合にはdelete v4tov4コマンドを使用します。

> netsh interface portproxy delete v4tov4 listenport=8080

まあポート転送が必要な状況自体がネットワーク設計的にどうなのよという話があったりなかったりもしますが、既存の制約や限られた時間の中でなんとかしないといけないケースもままあります。知っておくとひょっとすると役にたつかもしれないTipsのご紹介でした。

2014/11/10 平見知久
Tweet
sshのパラメータをbashで補完させる

サポートなんてやっていると、いくつも環境持つことになります。

データがろくに入っていない純粋な検証用なら鍵やアカウント共通でもいいのでしょうが、多少でもデータが入っているとさすがにそうは行きません。SSH鍵やポート、アカウント等はそれぞれ別のものとして管理することになります。

これらのパラメータを楽に管理するために簡単なスクリプトをネタに、bash補完で楽をする方法を紹介します。

まずsshのパラメータを簡単に指定できるスクリプトから。パスの通ったところにsshxという名前で配置し、実行権限をつけておきます。

#! /usr/bin/ruby

require 'json'
require 'optparse'

keydir="~/ssh-keys/"
confFile="~/ssh-keys/sshx.conf"

# confファイル読み込み
confData = ""
IO.foreach(confFile) do |line|
    confData += line
end

conf = JSON.parse(confData)

# コマンドライン解析
opt = OptionParser.new
opt.on('-L') do |v|
    conf.each_key do |k|
        desc = conf[k]["description"]
        if desc != nil then
            print "#{k}: #{desc}\n"
        else
            print "#{k}\n"
        end
    end
    exit 1
end

opt.on('-ll') do |v|
    conf.each_key do |k|
      print "#{k} "
    end
    print "\n"
    exit 0
end

opt.parse!(ARGV)

setting = conf[ARGV[0]]

if setting == nil then
    print "Invalid confname #{ARGV[0]}. Check sshx -l.\n"
    exit 1
end

cmdline = []

if setting["port"] != nil then
    cmdline << "-p" << setting["port"]
end

if setting['option'] != nil then
    cmdline << "#{setting['option']}"
end

if setting["pem"] != nil then
    cmdline << "-i" << keydir + setting["pem"]end

cmdline << "#{setting['user']}@#{setting['host']}"

exec('ssh',*cmdline)

次に設定ファイルとして、接続先一覧を記述したファイルを~/ssh-keys/sshx.confとして作成します。JSON形式です。

必要ならsshx側のパスを好みの場所に変更してください。sshの鍵(*.pem)も同じディレクトリに配置します。お約束ですがパーミッションに注意して下さい。

{
    "dev1": {
        "host" : "192.168.100.1",
        "port" : "10022",
        "user" : "user1",
        "pem"  : "dev1.pem",
        "description" : "開発環境1"
    },
    "dev2" : {
        "host" : "192.168.100.2",
        "port" : "10122",
        "user" : "user2",
        "pem"  : "dev3.pem",
        "description" : "開発環境2"
    },
    "fumidai-pf" : {
        "host" : "192.168.100.3",
        "port" : "10522",
        "user" : "dev3",
        "pem"  : "dev3.pem",
        "option" : "-L8080:localhost:80",
        "description" : "踏み台(w/PF)"
    },
    "fumidai" : {
        "host" : "192.168.100.3",
        "port" : "10522",
        "user" : "dev3",
        "pem"  : "dev3.pem",
        "description" : "踏み台"
    }
}

上記の例ですと、dev1, dev2, fumidai-pf, fumidaiをパラメータで指定するとIPやポート、鍵等を適切に選んで接続してくれます。

$ sshx dev1
dev1$

とかやっていると、今度はパラメータを一々手で入れるのが面倒くさくなってきます(苦笑)。

シェルならパラメータは補完して欲しいもの。というわけで、bashの補完機能で補完させることにします。

~/.bashrcあたりに以下を追加します。

_sshx()
{
  CAND=`sshx -ll`
  COMPREPLY=(`compgen -W"$CAND" $2`)
}
complete -F _sshx sshx

sshx -llで候補となるパラメータの一覧を表示するようにしているのがミソです。bash提供のcompgenコマンドとの組み合わせで一覧から候補を絞り込んで選択できるようになります。

上記の例ですと、sshx fで、ファイル名の補完と同様にfumidaiまで補完され、さらにを押すとそこから選択可能な一覧(例ではfumidaiとfumidai-pf)が表示されます。

今回は接続先リストを補完させましたが、一覧表示できれば色々と補完させることができます。よく使うコマンド系のパラメータを色々補完させてみるのも一興かもしれません。

  • OTOBO(OTRS)
  • 事業内容
  • 会社案内
  • お問い合わせ
  • ラボノート
  • カテゴリ
    • CMDBuild (1)
    • OCS Inventory NG (3)
    • OpenAudIT (8)
    • OSS (8)
    • OTOBO (61)
    • OTRS (96)
    • SnipeIT (1)
    • Znuny (20)
    • オープンソース (18)
    • 未分類 (1)
    • 豆知識 (7)
    アーカイブ
    • 2025年4月 (1)
    • 2025年3月 (4)
    • 2025年2月 (1)
    • 2024年11月 (1)
    • 2024年10月 (5)
    • 2024年9月 (4)
    • 2024年8月 (4)
    • 2024年7月 (5)
    • 2023年12月 (5)
    • 2023年8月 (2)
    • 2022年6月 (2)
    • 2022年5月 (1)
    • 2022年4月 (1)
    • 2022年3月 (2)
    • 2022年2月 (1)
    • 2022年1月 (6)
    • 2021年12月 (16)
    • 2021年11月 (4)
    • 2021年8月 (1)
    • 2021年4月 (1)
    • 2021年3月 (2)
    • 2021年2月 (2)
    • 2021年1月 (2)
    • 2020年5月 (1)
    • 2019年10月 (1)
    • 2019年8月 (1)
    • 2019年6月 (1)
    • 2019年2月 (2)
    • 2018年12月 (1)
    • 2018年10月 (3)
    • 2018年9月 (2)
    • 2018年8月 (1)
    • 2018年7月 (5)
    • 2018年6月 (3)
    • 2017年12月 (3)
    • 2017年11月 (4)
    • 2017年10月 (1)
    • 2017年9月 (2)
    • 2017年8月 (2)
    • 2017年7月 (1)
    • 2017年5月 (2)
    • 2017年4月 (4)
    • 2017年3月 (1)
    • 2017年2月 (3)
    • 2017年1月 (2)
    • 2016年12月 (2)
    • 2016年11月 (4)
    • 2016年10月 (3)
    • 2016年8月 (3)
    • 2016年7月 (1)
    • 2016年6月 (2)
    • 2016年5月 (4)
    • 2016年4月 (2)
    • 2016年3月 (1)
    • 2016年2月 (1)
    • 2016年1月 (2)
    • 2015年12月 (1)
    • 2015年8月 (1)
    • 2015年6月 (1)
    • 2015年5月 (3)
    • 2015年4月 (3)
    • 2015年3月 (3)
    • 2015年2月 (3)
    • 2015年1月 (3)
    • 2014年12月 (4)
    • 2014年11月 (4)
    • 2014年10月 (4)
    • 2014年9月 (2)
    • 2014年8月 (1)
Tweet

〒279-0004 千葉県浦安市猫実1-20-43
MAIL sales@io-architect.com

       
HOME OTOBO,Znuny,OTRS 事業内容 会社案内 ラボノート
保守サポート チケット管理サポート 会社概要 お問い合わせ
いつくしまパッケージ OpenAuditサポート 企業理念  
CRM機能(ContractDB) DRBDサポート プライバシーポリシー  
CTI連携(BIZTEL CTI) Kompiraサポート    
IT資産管理(CMDBReadyToUse) OSS導入サポート    
 導入事例 OSS導入事例    
 リリース情報 その他の技術支援    
© IO Architect Inc. 2016 - 2024
pagetop