1. 概要
~/.ssh/configの内容を参照するためのターミナルユーティリティ。
~/.ssh/configを指定フォーマットで書いておけば設定名や設定内容を参照できる。
2. スクリプト
#!/usr/local/bin/php
<?php
/**
* sshconf
* ~/.ssh/config を表示する
* @version 2013.05
*/
define('CONFIG_FILE', getenv('HOME'). '/.ssh/config');
echo "\n*** ". CONFIG_FILE. " ***\n";
/*
* パラメタなし... 全設定名を表示
*/
if (!isset($argv[1])){
foreach (@file(CONFIG_FILE) as $line){
$ck = strtoupper(trim($line));
if ('#' == substr($ck, 0, 1)) echo "\n{$line}";
if ('HOST ' == substr($ck, 0, 5)) echo $line;
}
}
/*
* パラメタあり... 該当設定の内容表示
*/
if (isset($argv[1])){
$disp = false;
$arg1 = strtoupper($argv[1]);
foreach (@file(CONFIG_FILE) as $line){
$ck = strtoupper(trim($line));
if ('HOST ' == substr($ck, 0, 5) && strpos($ck, $arg1, 5) > 1) $disp = true;
if ('#' == substr($ck, 0, 1)) $disp = false;
if ('HOST ' == substr($ck, 0, 5) && strpos($ck, $arg1, 5) == 0) $disp = false;
if ($disp) echo $line;
}
}
echo "\n";
3. ~/.ssh/config の例
$ cat ~/.ssh/config
# --------------- global setting for macOS Sierra
ServerAliveInterval 30
ServerAliveCountMax 3
Host *
UseKeychain yes
AddKeysToAgent yes
# --------------- hoge
Host hoge
HostName hoge.jp
User user1
# --------------- fuga
Host fuga1
HostName fuga.jp
Port 20022
User fuga1
LocalForward 20080 localhost:80
GatewayPorts yes
Host fuga2
HostName fuga.jp
Port 20022
User fuga2
# --------------- piyo
Host piyo1
HostName piyo.jp
Port 30002
User piyo1
Host piyo2
HostName piyo.jp
Port 30002
User piyo2
「#」はmarkdownパーサが誤作動するので全角にしています。実際のコメント行は半角#です。
4. 使用方法
//全ホスト名を表示
$ sshconf
*** /Users/XXXX/.ssh/config ***
# --------------- global setting for macOS Sierra
Host *
# --------------- hoge
Host hoge
# --------------- fuga
Host fuga1
Host fuga2
# --------------- piyo
Host piyo1
Host piyo2
//指定ホストの詳細を表示
$ sshconf pi
*** /Users/XXXX/.ssh/config ***
Host piyo1
HostName piyo.jp
Port 30002
User piyo1
Host piyo2
HostName piyo.jp
Port 30002
User piyo2
- やっつけで作ってるのでconfigの書き方に柔軟性は無いです。
- こんなもんでも役に立ってます。grepしたりエディタで開いて検索したりするよりは随分と便利です。