vyatta をリモート制御する

vyatta を ssh 等で制御しようとしてハマった人は結構多いのではないかと思い、tips をまとめておきます。

尚、お金のある人は vyatta subscription版 を購入すれば remote access api が利用できるので、こちらも便利だと思います。

遠隔からの vyatta operation

vyatta の CLIbash の complete機能 を用いて実現しています。そのため、sshコマンドに引数を渡してもvyattaコマンドの遠隔実行はできません。(通常のbashコマンドであれば動作します)

そこで、以下のようなスクリプトを経由させて間接的にコマンドを実行する必要があります。

  • ~vyatta/run-command.sh


!#/bin/vbash

vyatta_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/bash

vyatta_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 のような応用もできそうです。