企業環境では、ユーザーがSSH経由でアクセスできるアプリケーションを実行しています。このアプリケーションは、企業ネットワーク内のすべてのユーザー(サーバーサーバーなど)がSSH経由でアクセスできます。
ただし、突然、会社ネットワークの外部にある他のネットワーク(必要なファイアウォールルールがあります)のユーザーがSSHを介してこのアプリケーションにアクセスできなくなりました。外部ネットワーク上のコンピュータからサーバーのポート22へのTelnet接続に成功しました。ただし、会社のネットワーク上のサーバーにSSH接続を確立しようとすると、「サーバーが接続を閉じました」というメッセージが表示されます。
この問題で2週間閉じ込められていました。しかし、解決策が見つかりませんでした。ポート22にTelnetで接続できるということは、クライアントとサーバーが何の制限もなくSSHを介して正常に通信できることを意味しますか。 Telnetに加えて、クライアントとサーバー間のSSH接続が機能しているかどうかをテストする方法はありますか?
答え1
まず、クライアントを接続しますssh -vvv
(これを行うと、sshが実行する操作に関するいくつかのデバッグ情報が出力されます)。これは問題を診断するのに役立つ可能性があり、問題が最もよくわかる部分です。
次に、DNSが正しいホストとして解決されるSSHサーバーに接続するためにホスト名を使用していることを確認します。
sshdを有効にすることができますTCPラッパー。に項目を追加する必要があるかもしれません/etc/hosts.allow
。
サーバーが使用する認証メカニズムによっては、ユーザーが正しいメカニズムを使用しない限り、許可されません。 (たとえば、許可に設定し、
PubkeyAuthentication
そのユーザーの公開鍵を設定しないと拒否されます。)
これを設定PubkeyAuthentication
し、クライアントはSSH v1を使用して接続できます(RSAAuthentication
それはすべてです)。
3番目のsshd自体には、接続固有の詳細に対する接続を拒否できる複数の構成設定(man 5 sshd_config)があります。
AllowUsers, DenyUsers, DenyGroups, AllowGroups, AuthorizedPrincipalsFile