私はAWSクラスターを管理しており、現在変化しているアクセスリストに対して公開キーまたはLDAP認証を処理するのではなく、単一のジャンプボックスを介してのみSSHアクセスを実行する予定です。代わりに、ジャンプボックスの公開鍵は他のすべてのインスタンスで承認され、どのユーザーが他のインスタンスにアクセスできるかを制御します。しかし、一般ユーザーに秘密鍵を公開したくありません。
ssh [myserver]
私の最初の解決策は、実行してユーザーssh username@aws-jumpbox [myserver]
に接続できるようにする単純なシェルをbashに作成するか、コマンドのみを受け入れる対話型セッションをmyserver
確立することでした。ssh
しかし、後でシェルスクリプトでは対話型セッションを作成できないことを覚えていました。
私が探しているものを達成する簡単な方法はありますか?私は完全に間違った道を行っていますか?
ベストアンサー1
しかし、後でシェルスクリプトでは対話型セッションを作成できないことを覚えていました。
はい、可能です。ただし、これをコマンド(接続を確立するコマンド)-t
に渡す必要があります。ssh
到着ホストではなくホストにジャンプ~からジャンプヨスト)。その理由は、実行時にコマンドを指定した場合、デフォルトではssh
対話型セッションに必要なttyが割り当てられていないためです。-t
この問題を解決してください。
いくつかの可能な選択肢:
dialog
.- ターゲットシステムの名前を付けた各ターゲットシステムのジャンプホストにユーザーを作成します。このアプローチの欠点:多くのファイルでユーザーのSSHキーを維持する必要があります。これを行うには、いくつかの構成管理システムを使用するのが最善です。たとえば、puppet は
authorized_keys
ファイルと SSH キーの直接処理をサポートします。利点は、どのユーザーがどのホストにアクセスできるかをより簡単に定義できることです。
ユーザーがSSH秘密鍵を取得できないようにするには、そのユーザーもジャンプホストを使用またはscp
アクセスできないようにする必要があります。sftp
これは彼らの仕事をより困難にすることができます。
全体的に個人的にあなたがやろうとしていることが良い考えなのかよくわかりません。ジャンプホストは「sshキーが多すぎる」という問題を解決せず、単に移動して独自の問題を発生させます(scp / sftpなし、追加したホストは攻撃者が良いターゲットを試すのに問題があります)。訪問するみんなネットワークのホストなので、セキュリティの観点から対話型セッションと指定されたコマンドにSPOFの問題があります。
代わりに、以下を提案します。
- AWSホストで設定管理システムを使用し、起動する前に実行していることを確認してください
sshd
。これはいくつかの理由でとにかく良い考えです。私は選択肢よりもMuppetsをよく知っていますが、選択肢があります。 puppetを使用している場合は、次のようにユーザーのSSHキーを使用してファイルを作成します。
$user_wouter_sshkey = 'ssh public key data' $user_john_sshkey = 'ssh public key data'
など。
リソースへのアクセスを許可するユーザーグループごとに定義されたタイプを作成します。
define dbassh ($username = $title) { ssh_authorized_key {"wouter_dba_$username": key => $user_wouter_sshkey, type => 'ssh-rsa', user => $username, } ssh_authorized_key {"john_dba_$username": key => $user_john_sshkey, type => 'ssh-rsa', user => $username, } }
など。
これで、パペット構成の他の場所で次のことができます。
user {"postgres": ensure => present, purge_ssh_keys => true, } dbassh {"postgres":}