LXCにssh コマンドでログインしたい。
lxcのコンテナに にいちいちSSHインストールしたりパスワード決めたり、公開鍵を設定するのがめんどくさい。
通常であれば次のようにログインする。
いったん、SSHでログインして、その後にlxc コマンドで shell を起動する。
takuya@local $ ssh lxc-host takuya@lxc-host$ takuya@lxc-host$ lxc shell lxc-container-01
頻繁に実行しているとめんどくさいです。そこで ssh_config でconfig ファイルを設定してなんとかできないか考えました。
SSH経由でログインを自動化したい。
~/.ssh/configのファイルに記載します。
Host lxc-container01 Hostname lxc-host RequestTTY force RemoteCommand lxc exec --force-interactive lxc-container-01 bash
ssh でlxc-hostにログインする設定をかき、ログイン後に実行されるRemoteCommandで lxc shell コマンドを実行するわけです。
SSH踏み台経由と組み合わせる。
踏み台を使う場合は次のように書きます。
Host lxc-host Hostname lxc-host ProxyCommand ssh -W %h:%p ssh-GW
踏み台を使う場合は、ProxyCommandを書きますよね。 ProxyCommand はローカルで実行され、接続に使用されます。
これを、RemoteCommandと組み合わせてれば、良い訳です。これでGWを経由しつつ、LXCホストを踏み台にし、LXCコンテナのbashに1発でアクセスできるわけです。
組み合わせると次のようになります。
Host lxc-container01 Hostname lxc-host RequestTTY force ProxyCommand ssh -W %h:%p ssh-GW RemoteCommand lxc exec --force-interactive lxc-container-01 bash
この設定では RequestTTY force
と lxc exec --force-interactive
を使って tty をAllocateしています。こうしないと制御文字(EOF/CTRL-Dなど)がうまく渡せません。
まとめ
- RemoteCommand でSSHログイン後にリモートで実行するコマンドを指定
- lxc exec --force-interactive でTTYを確保
- RequestTTY force でローカルからリモートまでTTYでつなぐ
その他の応用方法
肝になる設定はRemoteCommandなので、踏み台に設置する authorized_keys に書くことで、鍵で識別して接続を振り分けてしまうことができる。
今回は、lxc だが。 docker exec -it
でも同じようにすることで、ちょくせつDockerのインスタンスに入れる。