cisshgo で擬似的に Cisco デバイスを再現する
「SDN コントローラのサウスバンド側に Cisco デバイスを用意したい」「Ansible から Cisco デバイスを操作するテストをしたい」といった場合に、擬似的に Cisco デバイスを再現する cisshgo を利用することが出来そうです。 cisshgo を実行すると以下の動作をするようです。
- デフォルトでは TCP/10,000 〜 10,049 まで 50 セッション分の SSH を待ち受ける
- 登録済みの Cisco コマンドに対して、決まった出力を応答する
「決まった出力を応答する」という振る舞いをする為、例えば「CLI で設定」を実施してもコンフィグには反映されませんので、その点には注意が必要です。 今回は cisshgo を利用する方法をメモしておきます。
検証環境¶
対象 | バージョン |
---|---|
Ubuntu | 24.04.2 LTS |
go-lang | 1.24.2 |
go-lang のインストール¶
cisshgo は go-lang で書かれており、GitHub の Releases ページ にはプラットフォームごとのバイナリも用意されているようです。 今回は mise で go-lang をインストールし、ソースコードを実行することにします。 まず go-lang をインストールします。 現時点の最新版は 1.24.2 でした。
# mise ls-remote go
1.2.2
1.3beta1
1.3beta2
・
・
・
1.24.0
1.24.1
1.24.2
go-lang 1.24.2 をインストールします。
mise install go@1.24.2
インストールした go-lang を利用するように設定します。
mise use go@1.24.2
サーバ側で cisshgo を実行する¶
cisshgo から clone します。
git clone https://github.com/tbotnz/cisshgo.git
cd cisshgo/
実行します。 Ctrl+C を押すまで実行されます。
go run cissh.go
実行ログ
TCP/10,000 〜 10,049 を Listen しています。
# go run cissh.go
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10002
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10043
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10029
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10044
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10013
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10046
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10032
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10031
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10042
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10040
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10045
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10047
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10033
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10048
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10034
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10030
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10035
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10041
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10036
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10037
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10014
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10016
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10018
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10001
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10015
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10019
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10000
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10017
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10039
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10020
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10009
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10003
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10004
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10005
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10021
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10049
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10010
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10022
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10011
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10023
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10012
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10024
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10006
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10025
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10007
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10026
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10027
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10008
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10028
2025/05/05 21:31:14 Starting cissh.go ssh server on port :10038
クライアント側から SSH 接続する¶
クライアントから SSH 接続してみます。 TCP/10,000 〜 10,049 のどのポートへ接続しても同じ結果になります。 今回は TCP/10,000 へ SSH 接続してみます。 デフォルトではユーザ名「admin
」、パスワードも「admin
」でログイン出来ます。
% ssh -p 10000 admin@10.0.0.1
Warning: Permanently added '[10.0.0.1]:10000' (RSA) to the list of known hosts.
admin@10.0.0.1's password:
cisshgo1000v>
前述の通り、cissh は「実機とは異なる動作」をします。 以下は実機へログインし、幾つかのコマンドを実行した際の出力例です。
% ssh -p 10000 admin@10.0.0.1
Warning: Permanently added '[10.0.0.1]:10000' (RSA) to the list of known hosts.
admin@10.0.0.1's password:
cisshgo1000v> enable
cisshgo1000v#show clock
% Unknown command: "show clock"
cisshgo1000v#configure terminal
cisshgo1000v(config)# exit
% Unknown command: " exit"
cisshgo1000v(config)#exit
cisshgo1000v#exit
cisshgo1000v>exit
Connection to 10.0.0.1 closed.
%
参考¶
cissh のヘルプ表示¶
# go run cissh.go --help
Usage of /root/.cache/go-build/e8/e8ae87547f70ccab816fa847a169a7338140ef2fd6cf8a943059c1ed7a250b0e-d/cissh:
-listeners int
How many listeners do you wish to spawn? (default 50)
-startingPort int
What port do you want to start at? (default 10000)
-transcriptMap string
What file contains the map of commands to transcribed output? (default "transcripts/transcript_map.yaml")