Windows

如何使用 SSH 從 Linux 客戶端到 Windows OpenSSH 伺服器要求 PubkeyAuthentication

  • September 5, 2019

我知道有一百萬個類似的文章,但我還沒有找到一個回答這個問題的文章。

我正在嘗試建立從 Ubuntu 18.04 客戶端到 Windows-10 v1903 版本上的內置 O​​penSSH SSH 伺服器的 ssh 連接。我沒有 Internet 域,因此 Windows 主機只能使用我的 ISP 分配的外部 IP 地址在 Internet 上可見。為了提高安全性,我希望 Windows SSH 伺服器同時要求公鑰身份驗證和使用者密碼身份驗證。此外,我已將 Windows 伺服器配置為使用 ssh 的備用埠。

在 Windows 主機上,以 test_user 身份登錄時,我使用命令“ssh-keygen -t ecdsa”創建使用者密鑰對(帶有密碼)並將其保存到文件“test_user_key”中,來自管理員命令提示符Windows,使用“ssh-add test_user_key”並確認使用“ssh-add -l”列出使用者,即使 C:\Users\test_user.ssh\authorized_keys 似乎是空的並且沒有 \ProgramData\ssh\authorized_keys 文件一點也不!然後我將生成的 test_user_key 私鑰複製到我的 Ubuntu 客戶端上的 /home/xxx/.ssh 並將權限設置為 600。

將 Windows SSH 伺服器 \ProgramData\ssh\sshd_config 配置為“PubkeyAuthentication yes”和“PasswordAuthentication yes”但註釋掉了“AuthenticationMethods”,我使用命令“ssh -p 15001 -i test_user_key test_user@192.168”在本地測試了配置.1.168",並且在輸入 test_user 密鑰和 test_user 帳戶密碼的密碼後,建立連接並通過 netstat 確認。

當我重新配置 Windows sshd_config 以啟用“AuthenticationMethods publickey,password”然後重新啟動 Windows 伺服器服務,並嘗試使用“ssh -p 15001 test_user@192.168.1.168”從 Linux 連接到 Windows,我立即被拒絕(即沒有提示對於密鑰的密碼),帶有“test_user@192.168.1.168:權限被拒絕(公鑰)”。正如預期的那樣,因為我未能提供密鑰。

然後我使用命令“ssh -p 15001 -i test_user_key test_user@192.168.1.168”提供私鑰,並提示輸入密鑰的密碼,但收到相同的“test_user@192.168.1.168:權限被拒絕(公鑰)”。輸入密碼後。

我認為問題在於實際的 test_user_key.pub 鍵以“test_user@HOSTNAME”而不是 test_user@192.168.1.168 結尾。但我找不到讓 ssh-keygen 使用 IP 地址而不是主機名創建密鑰對的方法。

當然,我最終必須使用我的 ISP 分配的外部 IP 地址創建一個密鑰對。但 …

(1) 在 sshd_config 中啟用 AuthenticationMethods 後,我什至無法在本地建立連接。

(2) 禁用 AuthenticationMethos 後,即使啟用了“PubkeyAuthentication”,Windows 伺服器也允許在沒有密鑰文件的情況下進行連接。

(3) 為什麼Windows的authorized_keys為空?

幫助!

  1. 由於 authorized_keys 文件為空,因此 publickey 身份驗證失敗。

它是空的,因為您沒有向其中添加公鑰。您可以通過首先cd-ing 到 windows 框上的 test_users .ssh 目錄並執行類似以下內容來添加它:

cat id_ecdsa.pub >> authorized_keys

(或者無論公鑰的文件名是什麼,如果不是id_ecdsa.pub不要將私鑰複製到authorized_keys)

順便說一句,如果您的 ssh 客戶端機器已經有一個公鑰和私鑰對,您可以將該公鑰添加到 authorized_keys 文件中。這是更正常的做事方式——在客戶端生成密鑰對,並在伺服器上安裝公鑰(並且只有公鑰)。伺服器不需要知道(在大多數情況下也不應該)客戶端的私鑰。 2. 當您將密鑰從 Windows 主機複製到客戶端電腦時,您複製的是公鑰還是私鑰?

您的 ssh 客戶端機器需要私有機器才能通過遠端 sshd 伺服器進行身份驗證。

您還需要確保您的~/.ssh/目錄 perms 是700AND 私鑰文件 perms 是600. 3. 最後,公鑰末尾的名稱(即“test_user@HOSTNAME”)是無關緊要的,它只是一個任意標籤。

引用自:https://unix.stackexchange.com/questions/538999