web-dev-qa-db-ja.com

OpenSSHの公開鍵認証Windowsポート

私は OpenSSHのPowerShellポート で動作する公開鍵認証をVM Windows Server 2012 R2を実行している)に取得しようとしています。

私は インストール手順 を忠実に守り、ファイルの権限が.ssh\authorized_keysに対して正しいことを確認しました。 (Win32-OpenSSH wikiの特定の手順へのリンクを投稿することはできません。私が2つ以上のリンクを投稿するには少なすぎるため、以下のコメントを参照してください)。

ユーザー名/パスワードを使用して、期待どおりLinuxホストからWindowsホストにログインできます。ただし、キー認証ではうまくいきません。

ローカル(Linuxホスト)構成

私のlocal.ssh/configファイルには以下が含まれます:

Host remotehostname
    HostName remotehostname
    User remoteuser
    Port 22
    IdentityFile /home/myusername/.ssh/id_dsa

ローカルの.sshディレクトリの権限は正しいようです:

[[email protected]]$ ls -ltrh
total 56K
-rw------- 1 cengadmin cengadmin 1.6K Sep 11 10:01 known_hosts
-r-------- 1 cengadmin cengadmin  672 Sep 11 10:06 id_dsa
-r-------- 1 cengadmin cengadmin  580 Sep 11 10:13 config

リモート(Windowsホスト)構成

remoteホストの.sshディレクトリは次のとおりです。

 Directory of C:\Users\REMOTEUSER\.ssh

09/11/2017  10:07 AM    <DIR>          .
09/11/2017  10:07 AM    <DIR>          ..
09/11/2017  10:07 AM               623 authorized_keys
09/11/2017  10:05 AM               672 id_dsa
09/11/2017  10:05 AM               623 id_dsa.pub
               5 File(s)          4,012 bytes
               2 Dir(s)  10,752,004,096 bytes free

C:\Users\REMOTEUSER\.ssh>icacls authorized_keys
authorized_keys NT SERVICE\sshd:(R)
                NT AUTHORITY\SYSTEM:(F)
                BUILTIN\Administrators:(F)
                FOODOM1\REMOTEUSER:(F)


C:\Users\REMOTEUSER\.ssh>icacls id_dsa
id_dsa BUILTIN\Administrators:(F)
       NT AUTHORITY\SYSTEM:(F)
       DHDOM1\REMOTEUSER:(R,W)

私のauthorized_keysファイルには、type id_dsa.pub > authorized_keysの出力のみが含まれています。

C:\Users\REMOTEUSER\.ssh>fc id_dsa.pub authorized_keys
Comparing files id_dsa.pub and AUTHORIZED_KEYS
FC: no differences encountered

sshd_configでPubkeyAuthenticationが有効になっている

PubkeyAuthentication yes

設定と権限は正気に見えます。ただし、アクセス許可をボットするといつも発生するmissing begin markerエラーが発生します。

sshd.log

わかりました:debug2: key not found

これは通常、authorized_keysに間違ったキーがあることを意味しますが、上記の相違によりこの問題は反証されると思います。

手がかり?優しくしてください、私はWindowsを怒って10年近く使っていません。

ssh -v出力

(このディレクトリには、明確にするために上記に含まれていない他のrsaキーがあることに注意してください)

$ ssh -v -i .ssh/id_dsa myhostname
OpenSSH_6.6.1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/localuser/.ssh/config
debug1: /home/localuser/.ssh/config line 21: Applying options for raleys-etl
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/localuser/.ssh/config
debug1: /home/localuser/.ssh/config line 15: Applying options for remotehostname
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Connecting to remotehostname [00:00:00:00] port 22.
debug1: Connection established.
debug1: identity file /home/localuser/.ssh/id_dsa type -1
debug1: identity file /home/localuser/.ssh/id_dsa-cert type -1
debug1: identity file /home/localuser/.ssh/ssis_rsa type -1
debug1: identity file /home/localuser/.ssh/ssis_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.5
debug1: match: OpenSSH_7.5 pat OpenSSH* compat 0x04000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr [email protected] none
debug1: kex: client->server aes128-ctr [email protected] none
debug1: kex: [email protected] need=20 dh_need=20
debug1: kex: [email protected] need=20 dh_need=20
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server Host key: ECDSA e7:aa:c8:d4:8b:02:58:da:64:e6:18:26:d3:be:6a:b2
debug1: Host 'remotehostname' is known and matches the ECDSA Host key.
debug1: Found key in /home/localuser/.ssh/known_hosts:5
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering RSA public key: [email protected]
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Offering RSA public key: [email protected]
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Offering RSA public key: [email protected]
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /home/localuser/.ssh/id_dsa
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type DSA
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: keyboard-interactive
Received disconnect from 00:00:00:00: 2: Too many authentication failures
2
Foo Barberger

ワオ。これをデバッグするのに数時間費やしただけです。

したがって、sshサーバーのロギングを有効にします。

  • 編集/ProgramData/ssh/sshd_config
    • SyslogFacility LOCAL0があることを確認してください
    • LogLevel DEBUG3があることを確認してください
  • 再起動OpenSSH SSH Server in Services
    Servicesにアクセスする簡単な方法は、Windows+Rキーコンボを押して、結果のRunservices.mscを入力することですダイアログ)

これで、完全なデバッグ情報が/ProgramData/ssh/logs/sshd.logに書き込まれていることがわかります。マシンにsshを試みた後、ログファイルを確認してください。

私には2つの問題がありました。

問題1:正しいauthorized_keysファイル

デバッグログは言った:

2019-03-08 … debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys

ああ、そうではない.ssh/authorized_keys。私はAdministratorsグループに属しており、sshd_configには私たちの特別なスタンザがあります。 .ssh/authorized_keysファイルの内容を/ProgramData/ssh/administrators_authorized_keysにコピーし、サーバーを再起動しました。

問題2:権限が緩い

今私は持っていました

2019-03-08 … debug3: Bad permissions. Try removing permissions for user: S-1-9-22 on file C:/ProgramData/ssh/administrators_authorized_keys.

icacls言った

C:\ProgramData\ssh> icacls administrators_authorized_keys
administrators_authorized_keys NT AUTHORITY\SYSTEM:(F)
                           BUILTIN\Administrators:(F)
                           NT AUTHORITY\SYSTEM:(I)(F)
                           BUILTIN\Administrators:(I)(F)
                           NT AUTHORITY\Authenticated Users:(I)(RX)

フォルダから継承された多くの権限があります(それが(I)が意味することです)。継承を削除します。 /inheritance:rはあなたの友達です。

C:\ProgramData\ssh> icacls administrators_authorized_keys /inheritance:r
processed file: administrators_authorized_keys
Successfully processed 1 files; Failed processing 0 files

よさそうだ:

C:\ProgramData\ssh> icacls administrators_authorized_keys
administrators_authorized_keys NT AUTHORITY\SYSTEM:(F)
                           BUILTIN\Administrators:(F)

だから私はサーバーを再起動し、それが機能しています。シーッシュ。

sshd_configの-​​LogLevelおよびSyslogFacilityへの変更を元に戻すことを忘れないでください。

2
bobbogo