コンテンツにスキップ

SSH#

Lagoonでは、SSHを通じて実行中のコンテナに接続することができます。コンテナ自体にはSSHサーバーはインストールされていませんが、代わりにSSHを使ってLagoonに接続し、そこからKubernetes APIを通じてリモートシェル接続を作成します。

SSHアクセスの設定を確認する#

SSHキーの生成#

同じキーを複数のコンピューター間で共有するのではなく、各デバイスごとに別々のSSHキーを生成することをお勧めします。各システムでのSSHキーの生成方法については以下を参照してください。

OSX(Mac)#

Mac

Linux(Ubuntu)#

Linux

Windows#

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接続#

接続#

接続は直接的で、次のパターンに従います:

SSH
ssh -p [PORT] -t [PROJECT-ENVIRONMENT-NAME]@[HOST]
  • PORT - リモートシェルのSSHエンドポイントポート(amazee.ioの場合:22)。
  • HOST - リモートシェルのSSHエンドポイントホスト(amazee.ioの場合ssh.example.com)。
  • PROJECT-ENVIRONMENT-NAME - 接続したい環境。これは通常PROJECTNAME-ENVIRONMENTのパターンで使用されます。

例えば:

SSH example
ssh -p 22 -t drupal-example-main@ssh.example.com

これにより、main環境のプロジェクトdrupal-exampleに接続します。

ポッド/サービス、コンテナ定義#

デフォルトでは、リモートシェルはタイプcliで定義されたコンテナに接続しようとします。他のポッド/サービスに接続したい場合は、以下のように定義できます:

SSH to another service
ssh -p [PORT] -t [プロジェクト-環境名]@[ホスト] service=[サービス名]

あなたのポッド/サービスに複数のコンテナが含まれている場合、Lagoonはあなたを最初に定義されたコンテナに接続します。また、接続したい特定のコンテナを定義することもできます:

コンテナを定義します。
ssh -p [ポート] -t [プロジェクト-環境名]@[ホスト] service=[サービス名] container=[コンテナ名]

例えば、nginxポッド内のphpコンテナに接続するには:

SSH to php container
ssh -p 22 -t drupal-example-main@sssh.example.com service=nginx container=php

ファイルのコピー#

一般的なケースで、ファイルをcliポッドにコピーすることは、通常のSSH互換ツールを使って達成できます。

scp#

Copy file with scp
scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 22 [ローカルパス] [プロジェクト名]-[環境名]@ssh.example.com:[リモートパス]

rsync#

Copy files with rsync
rsync --rsh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22' [ローカルパス] [プロジェクト名]-[環境名]@ssh.example.com:[リモートパス]

tar#

Bash
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 22 [プロジェクト名]-[環境名]@ssh.example.com tar -zcf - [リモートパス] | tar -zxf - -C /tmp/

非CLIポッド/サービスの指定#

まれなケースで、非CLIサービスを指定する必要がある場合は、指定することができます。 service=...および/またはcontainer=...引数はコピーコマンドにあります。

tarssh接続を通してパイプすることは最も単純な方法で、通常のtarフラグを用いてファイルやディレクトリーをコピーするために使用できます:

Bash
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を使用することもできます:

Bash
#!/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 to non-CLI pod
rsync --rsh="/path/to/rsh.sh service=cli" /tmp/foo [プロジェクト名]-[環境名]@sssh.example.com:/tmp/foo

このスクリプトは、container=...引数も処理するように調整することもできます。