SSH#
Lagoonでは、SSHを通じて実行中のコンテナに接続することができます。コンテナ自体にはSSHサーバーはインストールされていませんが、代わりにSSHを使ってLagoonに接続し、そこからKubernetes APIを通じてリモートシェル接続を作成します。
SSHアクセスの設定を確認する#
SSHキーの生成#
同じキーを複数のコンピューター間で共有するのではなく、各デバイスごとに別々のSSHキーを生成することをお勧めします。各システムでのSSHキーの生成方法については以下を参照してください。
OSX(Mac)#
Linux(Ubuntu)#
Windows#
SSHエージェント#
OSX(Mac)#
OSXは、起動時に設定されたSSHキーをロードするようにSSHエージェントが設定されていません。これにより問題が発生することがあります。この機能の設定方法については、こちらのガイドを参照してください:https://www.backarapper.com/add-ssh-keys-to-ssh-agent-on-startup-in-macos/
Linux#
Linuxディストリビューションは、ssh-agentの使用方法によります。一般的なガイドはここにあります:https://www.ssh.com/academy/ssh/agent
Windows#
最近ではWindowsでのSSHキーのサポートが大幅に向上し、現在ではネイティブにサポートされています。Windows 10のSSHエージェントの設定についての便利なガイドはここにあります:https://richardballard.co.uk/ssh-keys-on-windows-10/
SSHキーのアップロード#
UIを通じて#
SSHキーをUIを通じてアップロードできます。通常通りにログインしてください。
右上の角にある設定をクリックします:

次に、SSHキーをアップロードできるページが表示され、アップロードされたキーが表示されます。キーをテキストボックスに貼り付け、名前を付けて「追加」をクリックします。それだけです!必要に応じて追加のキーを追加します。

コマンドライン経由#
ユーザーにSSHキーを追加するためのLagoon APIをGraphQL経由で使用する一般的な例は、こちらにあります。
ポッドへのSSH接続#
接続#
接続は直接的で、次のパターンに従います:
PORT- リモートシェルのSSHエンドポイントポート(amazee.ioの場合:22)。HOST- リモートシェルのSSHエンドポイントホスト(amazee.ioの場合ssh.example.com)。PROJECT-ENVIRONMENT-NAME- 接続したい環境。これは通常PROJECTNAME-ENVIRONMENTのパターンで使用されます。
例えば:
これにより、main環境のプロジェクトdrupal-exampleに接続します。
ポッド/サービス、コンテナ定義#
デフォルトでは、リモートシェルはタイプcliで定義されたコンテナに接続しようとします。他のポッド/サービスに接続したい場合は、以下のように定義できます:
あなたのポッド/サービスに複数のコンテナが含まれている場合、Lagoonはあなたを最初に定義されたコンテナに接続します。また、接続したい特定のコンテナを定義することもできます:
例えば、nginxポッド内のphpコンテナに接続するには:
ファイルのコピー#
一般的なケースで、ファイルをcliポッドにコピーすることは、通常のSSH互換ツールを使って達成できます。
scp#
scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 22 [ローカルパス] [プロジェクト名]-[環境名]@ssh.example.com:[リモートパス]
rsync#
rsync --rsh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22' [ローカルパス] [プロジェクト名]-[環境名]@ssh.example.com:[リモートパス]
tar#
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 22 [プロジェクト名]-[環境名]@ssh.example.com tar -zcf - [リモートパス] | tar -zxf - -C /tmp/
非CLIポッド/サービスの指定#
まれなケースで、非CLIサービスを指定する必要がある場合は、指定することができます。 service=...および/またはcontainer=...引数はコピーコマンドにあります。
tarをssh接続を通してパイプすることは最も単純な方法で、通常のtarフラグを用いてファイルやディレクトリーをコピーするために使用できます:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 32222 [プロジェクト名]-[環境名]@ssh.example.com service=solr tar -zcf - [リモートパス] | tar -zxf - -C /tmp/
また、LagoonのSSHサービスに必要な形でsshの引数を並べ替えるラッパースクリプトを用いてrsyncを使用することもできます:
#!/usr/bin/env sh
svc=$1 user=$3 host=$4
shift 4
exec ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22 -l "$user" "$host" "$svc" "$@"
それを実行可能なシェルスクリプトrsh.shに入れて、rsyncコマンドでservice=...を指定します:
rsync --rsh="/path/to/rsh.sh service=cli" /tmp/foo [プロジェクト名]-[環境名]@sssh.example.com:/tmp/foo
このスクリプトは、container=...引数も処理するように調整することもできます。