web-dev-qa-db-ja.com

GitHubに似た動的なキーベースのSSHをどのように実行できますか?

アプリのユーザーにSSH/RSYNCのような機能を提供したくありません。 SSHキーをアプリに貼り付けて保存できるようにしたいと思います GitHubの場合と同様

enter image description here

したがって、私の質問は、ユーザーにキーを(できればデータベースに)保存させたら、次のようになります。

実際にLinuxユーザーアカウントを作成せずにSSH/RSYNC機能を提供/模倣できる方法はありますか?それらに基づいて承認できるようにしたいと思いますデータベースに保存された公開鍵を特定のフォルダーにRSYNCで出し入れします(たとえば、アプリ内のユーザー名に基づいて)。

(重要な場合は、Rails Ubuntuサーバーにデプロイされたアプリ)

1
Callmeed

SSHのauthorized_keys-fileのcommand-オプションを見てください。このようにして、SSHキーに応じて、マシンにアクセスする特定のユーザーにコマンドを強制することができます。

サーバー上で「git」という名前のユーザーを想像してみてください。このユーザーには、例として次のauthorized_keysファイルがあります。

command="/path/to/script user1",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa [public key of user1]
command="/path/to/script user2",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa [public key of user2]

したがって、user1を実行するとssh [email protected] "/execute/command --with --parameter"/path/to/scriptが呼び出されます(gitユーザーとして)。このスクリプトは元のコマンドにアクセスできます(/execute/command --with --parameter)環境変数$ SSH_ORIGINAL_COMMAND内(詳細については、SSHのドキュメントを参照してください)。

このように、authorized_keys-fileに正しい行を入れるだけです(データベースに保存されているキーからファイルを動的に構築できます)。

そこから、独自のシェルを作成するか、元のコマンドで好きなことを行うことができます。

これは基本的に、gitoliteとgitosisがgitリポジトリのアクセス許可を管理する方法です(Githubはこれらのいずれかを使用していると思います)。

これが少し役立つことを願っています-よろしくお願いします!

3

OPは、キーを複数のユーザーに割り当てたいこと、およびユーザーを実際のLinuxユーザーとしてではなくデータベースに保存したいことを具体的に述べています。上記のGithubスタイルのセットアップでは、単一のgitユーザーがいます。

答えを完全にするために、OPはAuthorizedKeyCommandディレクティブも使用する必要があります。これはここで非常によく説明されています データベースからの公開鍵を使用したOpenSSH

したがって、両方を組み合わせて使用​​します。データベースに保存されているx人のユーザーに対するサーバーへの認証は、によって行われます。カスタム認証スクリプト(Webアプリケーションでスクリプトを呼び出すbashスクリプト)に基づく

カスタムスクリプトが認証のために(authorized_keysファイルの代わりに)公開鍵をOpenSSHに返す場合、MichaelTrojanekの回答に記載されている形式で公開鍵を提供します。このようにして、動的ユーザーがアクセスできる特定の機能に対する承認を提供します。

1
Pharaoh Tools