gitlab-sshd

gitlab-sshd はGoで書かれたスタンドアロンのSSHサーバです。gitlab-shell パッケージの一部として提供されています。OpenSSHの代替としてメモリ使用量が少なく、プロキシの後ろで動作するアプリケーションのためにIPアドレスによるグループアクセス制限をサポートしています。

gitlab-sshdSSH オペレーションを提供する OpenSSH の軽量な代替ソフトです。OpenSSH が制限されたシェルのアプローチを使っているのに対し、 gitlab-sshdOpenSSH は最新のマルチスレッドサーバアプリケーションのように 動作し、入ってくるリクエストに応答します。大きな違いは、OpenSSH が SSH をトランスポートプロトコルとして使っているのに対し、gitlab-sshd はリモートプロシージャコール (Remote Procedure Calls: RPC) を使っていることです。詳しくはブログ記事をご覧ください。

GitLab Shellの機能はGitオペレーションだけにとどまりません。

OpenSSH からgitlab-sshd への乗り換えを検討している場合は、以下の点を考慮してください:

  • gitlab-sshd は PROXY プロトコルをサポートしています。HAProxy のような、PROXY プロトコルに依存している プロキシサーバの背後でも動作します。PROXY プロトコルはデフォルトでは有効になっていませんが、有効にすることはできます。
  • gitlab-sshd は SSH 証明書をサポートしていません。証明書の追加についてはイシュー655を参照してください。

有効にするgitlab-sshd

gitlab-sshd を使用するには:

Linux package (Omnibus)

以下の手順で、OpenSSH とは別のポートでgitlab-sshd を有効にします:

  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_sshd['enable'] = true
    gitlab_sshd['listen_address'] = '[::]:2222' # Adjust the port accordingly
    
  2. オプション。デフォルトでは、Linux パッケージインストールは/var/opt/gitlab/gitlab-sshd に SSH ホストキーが存在しない場合、gitlab-sshd の SSH ホストキーを生成します。 この自動生成を無効にしたい場合は、この行を追加してください:

    gitlab_sshd['generate_host_keys'] = false
    
  3. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    

デフォルトでは、gitlab-sshdgit ユーザーとして実行されます。そのため、gitlab-sshd 1024以下の特権ポート番号では実行 gitlab-sshdできません。gitlab-sshd つまり、ユーザーはこの gitlab-sshdポートgitlab-sshd 番号でGitにアクセス gitlab-sshdするか、ロードバランサーを使ってSSHトラフィックをgitlab-sshd

新しく生成されたホスト鍵が OpenSSH のホスト鍵と異なるため、ユーザーはホスト鍵の警告を見るかもしれません。これがイシューになる場合は、ホスト鍵の生成を無効にして、既存の OpenSSH ホスト鍵を/var/opt/gitlab/gitlab-sshd にコピーすることを検討してください。

Helm chart (Kubernetes)

以下の手順は、OpenSSH をgitlab-sshd に切り替えるものです:

  1. gitlab-shell チャートsshDaemon オプションをgitlab-sshdに設定します。例えば

    gitlab:
      gitlab-shell:
        sshDaemon: gitlab-sshd
    
  2. Helm のアップグレードを実行します。

デフォルトでは、gitlab-sshd をリッスンします:

  • 外部からのリクエストはポート 22 (global.shell.port) で受け付けます。
  • 内部リクエストはポート 2222 (gitlab.gitlab-shell.service.internalPort)。

Helmチャートで異なるポートを設定できます。

PROXYプロトコルのサポート

ロードバランサがgitlab-sshdGitLabの gitlab-sshd前で使用されている場合gitlab-sshd、GitLabはクライアントの実際のIPアドレスの代わりにプロ gitlab-sshd キシの gitlab-sshdIPアドレスを報告します。 gitlab-sshd

Linux package (Omnibus)

PROXYプロトコルを有効にするには

  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_sshd['proxy_protocol'] = true
    # Proxy protocol policy ("use", "require", "reject", "ignore"), "use" is the default value
    gitlab_sshd['proxy_policy'] = "use"
    
  2. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. gitlab.gitlab-shell.config オプションを設定します.例えば

    gitlab:
      gitlab-shell:
        config:
          proxyProtocol: true
          proxyPolicy: "use"
    
  2. Helm のアップグレードを実行します。