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=...
引数も処理するように調整することもできます。