これで、チームはSSH公開鍵認証を介してサーバーに接続できます。各チームメンバーは自分のPCに秘密鍵を持ち、~/.ssh/
公開鍵はサーバー上のファイルにありますauthorized_key
。
各チームメンバーに割り当てられたPCのみがサーバーへのSSH接続を承認するように要求されました。
実際、チームメンバーがそのコンピュータへのルートアクセス権を持っていなくても、理論的にはホームフォルダから秘密鍵をコピーし、別のコンピュータで使用してサーバーに接続できるようになりました。だから私の質問はこれを行う方法です。
私は多くの文書を読んで、私に最適なものが何であるかをテストしました。ホストベース認証。
これが私の問題に対する完璧な解決策のようです。各 PC には、非/etc/ssh/
root ユーザーが読み取ることができず、既存の公開鍵認証構成に加えて認証をホストするために使用される秘密鍵があります。
私が経験している問題は、SSHクライアントがサーバーに送信するホスト名にあります。私が接続されているネットワークに従って送信されるホスト名が、、であることを確認fooMachine.localdomain
しfooMachine.home
ましたfooMachine
。
使ってssh -vvv user@ip
みると
debug2: userauth_hostbased: chost ...
これに注意してください。
PCが常に同じネットワーク上のSSHサーバーに接続されているわけではなく、VPNや固定IPはありません。
fooMachine.localdomain
したがって、これが意味するのは、SSHサーバーで何度も(、、、fooMachine.home
)接続するようにホストを宣言する必要があり、fooMachine
ネットワークに接続した後に別のサフィックスを持つようになり、fooMachine
接続できないことが発生する可能性があることです。私のサーバーに接続してください。
この問題をどのように解決できますか?それとも私が何か間違っているのでしょうか?
fooMachine.test.com
再起動後もhostname --fqdn
表示されたSSHクライアントfooMachine.test.com
で使用されるホスト名は同じですfooMachine.localdomain
。
また、サーバーに接続するホストを宣言したSSHサーバーのshosts.equivファイルでワイルドカードを試しましたが、機能しませんでした。読んだ後ソースコードこれはワイルドカード(+
rhostsスタイルファイルの場合)が無視されるため意味があります。
答え1
特定の秘密鍵で認証を試みるときに許可される制限を追加する一般的な方法は次のとおりです。 ~/.ssh/authorized_keys
from="pattern-list"
サーバー上のファイル - 特にユースケースに合わせて、このオプションを使用して特定のキーペアを使用できるホストを構成/制限する機能。
たとえば、
# ~/.ssh/.authorized_keys
from="10.80.0.0/14,192.168.1.2,hbruijns-workstation.internal.example.com" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault
たとえば、一致する秘密鍵を使用して、hbruijns-workstation.internal.example.com
IPアドレス192.168.1.2
および/または範囲内のすべてのIPアドレスでのみログインを許可します10.80.0.0/14
。
追加の改善により、 ~/.ssh/.authorized_keys をサーバー管理者の制御下に置くことで、チームメンバーがこの制限を無視できないようにすることができます。
私がすでに言及していて、あなたが言及したように、ネットワークが信頼できるクライアントに依存するセキュリティモデルを実装するための前提条件をサポートしていない場合、これはあまり役に立ちません。
- 信頼できる顧客を識別するための信頼できる方法が必要です。
クライアントに固定IPおよび/またはホスト名が割り当てられていない場合、この方法は機能しません(他の方法も同様です)。
だから要求「各チームメンバーに割り当てられたPCのみがサーバーへのSSH接続を承認します。」 チームメンバーPCに必要な静的IPアドレス割り当てを取得したり、チームメンバーがVPNを介して接続したりできる管理ネットワークなどの要求は拒否または拒否する必要があります。
答え2
問題を解決する1つの方法は、SSHクライアント構成ファイル(/etc/ssh/ssh_config
または~/.ssh/config
)のSendEnvオプションを使用して、ホストベースの認証に使用するホスト名を含むカスタム環境変数を送信することです。サーバー側では、AcceptEnv
SSHデーモン構成ファイル()/etc/ssh/sshd_config
のオプションを使用してこの環境変数を適用できます。
これを行う方法の例は次のとおりです。
各クライアントコンピュータでSSHクライアント設定ファイル(/etc/ssh/ssh_config or
~/.ssh/config
)を編集し、次の行を追加します。
Host *
SendEnv MY_HOSTNAME
各クライアントコンピュータで、MY_HOSTNAME環境変数を希望のホスト名に設定します。ユーザーのシェルプロファイル(~/.bashrc
または)に次の行を追加するだけ~/.zshrc
です。
export MY_HOSTNAME=fooMachine.test.com
サーバーでSSHデーモン構成ファイル(/etc/ssh/sshd_config
)を編集し、次の行を追加します。
AcceptEnv MY_HOSTNAME
サーバーでSSHデーモンを再起動して変更を適用します。これらの手順を完了した後、ユーザーがSSHを使用してサーバーに接続すると、MY_HOSTNAME
環境変数がサーバーに送信され、ホストベースの認証に使用できます。