それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ssh/config で ホストを踏み台にして、直接 lxc のコンテナにログインする。

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 forcelxc 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のインスタンスに入れる。

sshの公開鍵authorized_keys ファイルの制限機能について調べてみたら楽しかった. - それマグで!