Windows8.1を実行しているときにserver refused our key
問題が発生しました。
ガイドに従う:https://winscp.net/eng/docs/guide_windows_openssh_serverWindows
ログインusername
とを使用して接続を確立するのは簡単でしたpassword
。ただし、とusername
組み合わせて認証するprivate key
と、応答はでしたserver refused our key
。
公開鍵で機能させるには、ファイルのアクセス許可が必要です。
C:\ProgramData\ssh\administrators_authorized_keys
これは役立つページです:https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
その後、開く、2つのOpenSSHのサービスを停止しcommand prompt
てadmin permissions
。次に、以下を実行します。
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
注:exeへのフルパスを指定してくださいsshd
。そうしないと文句が表示されます。これにより、1回限りの接続リスナーが作成されます。これ-ddd
は冗長レベル3です。
接続を確立した後、ログをスキャンすると次のことが明らかになりました。
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Failed to open file:C:/ProgramData/ssh/administrators_authorized_keys error:2
debug1: Could not open authorized keys '__PROGRAMDATA__/ssh/administrators_authorized_keys':
No such file or directory
ファイルを作成する必要がありました:C:\ProgramData\ssh\administrators_authorized_keys
そして、public key
テキストをそのファイルにコピーssh-rsa AAAA................MmpfXUCj rsa-key-20190505
します。例:そしてファイルを保存します。と同じようにファイルを保存UTF-8
しましたBOM
。テストしませんでしたANSI
。
次に、1回限りのコマンドラインを再度実行すると、ログに次のように表示されます。
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Bad permissions. Try removing permissions for user: S-1-5-11 on file C:/ProgramData/ssh/administrators_authorized_keys.
Authentication refused.
S-1-5-11
に付けられた名前System
です。
を修正するにはBad permissions
、administrators_authorized_keys
ファイルを右クリックし、Security Tab
に移動してAdvanced
ボタンをクリックし、継承されたアクセス許可を削除します。次にGroup or user names:
、Windowsログインユーザー名を除くすべてを削除します。例:YourMachineName\username
そのためのアクセス許可は、チェックされていusername
ない必要がRead Allow
ありWrite Deny
ます。ファイルの所有者もYourMachineName\username
これで問題が修正されました。
その他の便利なリンク:
OpenSSH-Win32.zipをhttps://github.com/PowerShell/Win32-OpenSSH/releasesからダウンロードします。
WinSCPnet.dllを使用してOpenSSHサーバーに接続する方法のC#の例:https://winscp.net/eng/docs/library#csharp
WinSCPnet.dll
:を使用して接続するためのコードスニペットは次のとおりです。
static void WinSCPTest() {
SessionOptions ops = new SessionOptions {
Protocol = Protocol.Sftp,
PortNumber = 22,
HostName = "192.168.1.188",
UserName = "user123",
//Password = "Password1",
SshHostKeyFingerprint = @"ssh-rsa 2048 qu0f........................ddowUUXA="
};
ops.SshPrivateKeyPath = @"C:\temp\rsa-key-20190505.ppk";
using (Session session = new Session()) {
session.Open(ops);
MessageBox.Show("success");
}
}
置き換えSshHostKeyFingerprint
とSshPrivateKeyPath
独自の値を持ちます。
編集:administrators_authorized_keysファイルのアクセス許可のスクリーンショットを追加しました:
OpenSSH SSH Server
がサービスとして実行されている場合は、System
権限のみが必要です。ただし、sshd.exe
コマンドプロンプトから実行する場合は、現在のユーザーのみがリストされている必要があります(読み取り許可、書き込み拒否)。