日本語│English
       

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

  • ホーム
  • OTRS
  • サービス内容
  • 会社案内
  • ラボノート
  • お問い合わせ
  1. HOME
  2. ラボノート
  3. sshのパラメータをbashで補完させる

ラボノート

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