web-dev-qa-db-ja.com

公開鍵認証を使用してOpenSSH for Windowsをセットアップする

公開鍵認証を使用して、OpenSSH for Windowsのセットアップに問題があります。

私はこれをローカルデスクトップで動作させ、UnixマシンまたはWindowsマシン用の他のOpenSSHのキーを使用してsshできます。

ビルドをサーバーに複製しましたが、パスワード認証は正常に機能しますが、キーを使用すると次の問題が発生します。

debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /cygdrive/c/sshusers/jsadmint2232/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Connection closed by 127.0.0.1

そのため、テストの目的のために、localhostにSSHで接続しようとしていますが、リモートで試行しても同じ問題が発生します。

さらに奇妙なことに、パスワードと公開キーの両方をsshd_config、キーの使用のみを試みてから上記のメッセージで爆破し、パスワードの使用も試みません。

私が行ったステップは次のとおりです。

  1. Windows用OpenSSHをインストールする
  2. mkgroup -l >> ..\etc\group(追加されたローカルグループ)
  3. mkgroup -d >> ..\etc\group(追加されたドメイングループ)
  4. mkpasswd -L -u openssh >> ..\passwd(ローカルユーザーを追加)
  5. mkpasswd -D -u jsadmint2232 >> ..\passwd(ドメインユーザーを追加)
  6. Passwdのhomedirを編集して、c:\ sshusers \%USER%を指すようにしました-%USER%はユーザー名です
  7. 有効なパスワード認証、無効なキー認証
  8. Jsadmint2232/opensshの両方にsshキーを作成し、homedirsにファイルが作成されたことを確認しました
  9. Authorized_keysファイルを各ユーザーの.sshディレクトリに追加し、着信接続ユーザーのキーを追加しました
  10. net stop opensshd/net start opensshd
  11. テストパスワード認証はローカルとリモートの両方で機能します
  12. Sshd_configを更新して、キー認証を有効にしました-opensshdを再起動します
  13. 接続をテストし、上記のエラーを取得し、パスワード認証も試行しませんか?
  14. パスワード認証を完全に無効にするためにsshd_configを更新しました-opensshdを再起動します
  15. 接続をテストしても上記のエラーが発生する

サーバーが何らかの理由で接続を切断しているようです。

23
Cambolie

私は問題を解決しました...

これは、サービスを開始したアカウント(ローカルシステムアカウントを使用していたアカウント)に関連しています。これは、pubキーとauthorized_keysファイルへのアクセスを停止していました。

サービスを停止し、接続しようとしているユーザーとして開始すると、機能しました!

したがって、基本的には、サービスアカウントで開始し、外部ユーザーがそのユーザーとして接続する必要があります。

5
Cambolie

以下は、Windows 10 v.1803に同梱されているOpenSSHのセットアップ手順です(2018年4月の更新。この投稿へのコメントを参照してください。1809では動作しない可能性があります)。

サーバーのセットアップ(昇格されたPowerShell):

  1. OpenSSHサーバーをインストールします:Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

  2. エージェントおよびsshdサービスを開始します:Start-Service ssh-agent; Start-Service sshd(これにより、$env:ProgramData\sshでホストキーとデフォルト構成が自動的に生成されます)。

  3. [オプション] OpenSSHUtils PowerShellモジュールをインストールします:Install-Module -Force OpenSSHUtils

クライアントのセットアップ(昇格されていないPowerShell):

  1. ユーザーキーを生成:cd $env:USERPROFILE\.ssh; ssh-keygen.exe、プロンプトに従い、デフォルトの推奨ファイルの場所に同意します。これにより、2つのファイルが作成されます:id_rsaおよびid_rsa.pub;

  2. [オプション]認証エージェントにキーを追加して、使用するたびにパスワードを入力する必要がないようにします。ssh-add .\id_rsa(または生成されたファイル);

サーバーのセットアップは続行されました(非昇格のPowerShell):

  1. 公開鍵認証を使用するユーザーとしてログインします
  2. cd $env:USERPROFILE; mkdir .ssh; cd .ssh; New-Item authorized_keys;
  3. クライアントからのid_rsa.pubファイルの内容を前のステップからの.ssh\authorized_keysファイルに貼り付けます。
  4. 適切に権限を設定します(重要!!!):
    1. start .を実行して、現在のフォルダー($env:USERPROFILE\.ssh)でエクスプローラーを開きます。
    2. authorized_keysを右クリックして、Properties -> Security -> Advancedに移動します
    3. [継承を無効にする]をクリックします。
    4. プロンプトが表示されたら、「継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換する」を選択します。
    5. (本当に、本当に重要)SYSTEMと自分以外のファイルのすべての許可を削除します。ファイルには正確に2つのアクセス許可エントリが必要です。一部のガイドでは、Repair-AuthorizedKeyPermission $env:USERPROFILE\.ssh\authorized_keysの実行が推奨されています。これにより、sshdユーザーが権限リストに追加され、willbreak認証のため、そうしないでください。少なくともsshdユーザーの追加に同意しないでください)。 SYSTEMと自分の両方がファイルを完全に制御できるはずです。

クライアント:

  1. ssh <serverusername>@<serverhostname>を実行します。この時点で動作するはずです。

サーバーとしてWindows 10を使用し、それ自体とクライアントとしてDebian Linuxの両方で試してみました。

編集:(以下のコメントセクションを参照)現在のウィンドウビルドでは、以下のコメントもコメントアウトする必要があります

PS C:\ProgramData\ssh> bash -c 'vim sshd_config'

# Match Group administrators                                                    
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys  
62
n0rd

Mls-software.comのOpenSSHバージョンを使用している場合は、別の注意事項があります。

SSHD_SERVERアカウントと特権分離を使用してインストールする場合、公開キー認証を使用できます( http://www.mls-software.com/opensshd-pki.html を使用)。ただし、UACが有効な場合、インストールは成功しません。ユーザーは適切に作成されず、サービスは作成されません。事実の後にこれらのアイテムを手動で起動しようとすることは非常に困難です。インストール前にUACを無効にするだけで、インストールプロセスでユーザーとサービスを適切に作成できます。インストール後、UACを再度有効にすることができます。

パスワード認証を使用している場合、SSHD_SERVERアカウントを手動で作成すると認証は成功しますが、クライアントは「/ bin/bash:Operation not allowed」で接続を終了します。公開鍵による認証はサーバーによって閉じられました(元のエラーはCambolieによって投稿されました)。

3
Dustin

私はそれを解決しました:

  1. SSHD_SERVER +特権分離モードでインストールします。また、構成で特権の分離を手動で「yes」に設定します。これは長い間私にとってはうまくいかず、ユーザーは作成されませんでした。それはうまくいきました、なぜかわかりません。 UACがオフになっていることを確認するために、コントロールパネルのユーザーアカウントにのみアクセスしました。また、/ var/emptyを使用して、すべてのユーザーがフルアクセスできました。
  2. C:\ openssh\var\emptyの場合、「属性取得/設定」アクセス許可をEveryoneと自分に設定し、「フル」アクセス許可を。\ sshd_serverに設定しました。私もそれを所有者にしました。
1
Mikhail Orlov