vyatta をリモート制御する
vyatta を ssh 等で制御しようとしてハマった人は結構多いのではないかと思い、tips をまとめておきます。
尚、お金のある人は vyatta subscription版 を購入すれば remote access api が利用できるので、こちらも便利だと思います。
遠隔からの vyatta operation
vyatta の CLI は bash の complete機能 を用いて実現しています。そのため、sshコマンドに引数を渡してもvyattaコマンドの遠隔実行はできません。(通常のbashコマンドであれば動作します)
そこで、以下のようなスクリプトを経由させて間接的にコマンドを実行する必要があります。
- ~vyatta/run-command.sh
!#/bin/vbashvyatta_sbin=/opt/vyatta/sbin
args=$*
. /etc/bash_completion
eval _vyatta_op_run $args
リモートホストから vyatta を制御するには、例えば以下のように実行します。
$ ssh vyatta@(vyattaホスト) '~/run-command.sh show version'
遠隔からの vyatta configuration
遠隔ホストから vyatta のコンフィグを書きかえる場合は、以下のようなスクリプトで実行できます。
- ~vyatta/config.sh
#!/bin/bashvyatta_sbin=/opt/vyatta/sbin
wr=$vyatta_sbin/vyatta-cfg-cmd-wrapper
opt_cmd=$1
shift
cmdline=$*cfg_stdin ()
{
while read line
do
eval $wr "$line"
done
}cfg_cmdline ()
{
eval $wr $cmdline
}. /etc/bash_completion
$wr begin
if [ "${opt_cmd}" = "-c" ]
then
cfg_cmdline
else
cfg_stdin
fi$wr commit
$wr end
$ ssh vyatta@(vyattaホスト) '~/config.sh -c set system host-name foobar'
上記スクリプトは 引数 '-c' を付けると、続けてコンフィグ設定コマンドを記述できます。
何も引数を付けない場合は標準入力からコマンドを受け付けるので、複数のコンフィグをまとめて変更する際に利用します。
config.sh や run-command.sh は ホスト内でも勿論利用できますので、vyatta CLI を用いてバッチ処理をさせたい場合にも利用できます。なので、うまく活用すれば Junos の event script のような応用もできそうです。