在客戶端和伺服器上使用公鑰身份驗證設置和驗證 SFTP 的行為
環境
- Windows
-
- Windows 10 Pro
- Windows Server 2019
- Windows 7
- Windows Server 2012 R2
- OpenSSH
-
- 7.7p1
- 8.1p1 - Beta
* 它適用於其他版本,但尚未確認
入門
上次,我們設置了 SFTP 伺服器,以確保密碼身份驗證可以發送和接收檔。 這一次,我們將使用公鑰身份驗證通過 SFTP 發送和接收檔。
提前準備
- 用戶端上安裝了OpenSSH用戶端
- 伺服器上安裝了 OpenSSH 伺服器
- 伺服器已啟動OpenSSH服務,並且埠22已釋放
在用戶端上創建私鑰和公鑰
登錄到用戶端。 私鑰和公鑰也可以由伺服器端創建,公鑰由伺服器擁有。 在客戶端創建。
使用管理許可權啟動電源外殼。
建立檔案後,使用 cd 命令導航到任何資料夾,然後鍵入以下命令:
ssh-keygen -t rsa -f id_rsa
密鑰包含密碼(密碼),因此,如果需要,請輸入密碼。
如果金鑰產生成功,將顯示以下資訊,並在資料夾中建立公鑰和私鑰: "id_rsa"是私鑰,"id_rsa.pub"是公鑰。
將公鑰放在伺服器上
使用SFTP帳戶登錄到伺服器。
將建立的公鑰「id_rsa.pub」放在伺服器的以下資料夾中: 「. 如果沒有 ssh 資料夾,請建立它。 此外,將檔名更改為"authorized_keys"。 (<>替換為使用 SFTP 登錄的使用者名。
- C:\users\<使用者名>\.ssh
請注意,只有具有管理員許可權或 SFTP 使用者才能訪問此檔。 如果其他使用者具有訪問許可權,則 SFTP 連接始終失敗。 例如,如果許可權包含"使用者"或"所有人"組,則為NG。
對於此示例,請參閱。 ssh 資料夾的許可權為「組:SYSTEM」、「組:管理員」和「使用者:最自由」。 如果無法刪除許可權,請禁用許可權繼承。
在伺服器上啟用公鑰身份驗證
使用管理員權限的使用者登入伺服器並開啟以下資料夾:
- C:\ProgramData\ssh
由於存在名為"sshd_config"的檔,因此請複製該檔,將檔名更改為"sshd_config_default",然後進行備份。
在以管理許可權啟動的文本編輯器中打開sshd_config。
要啟用公鑰身份驗證,請更改以下功能:
#PubkeyAuthentication yes
↓↓↓
PubkeyAuthentication yes
此外,預設情況下啟用密碼身份驗證,因此,如果要禁用密碼身份驗證,請更改以下設置:
#PasswordAuthentication yes
↓↓↓
PasswordAuthentication no
我想為每個SFTP 帳戶放置公鑰,因此請註釋掉以下行:
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
↓↓↓
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
如果要為每個 SFTP 帳戶指定根目錄,請添加以下行: 如果從用戶端指定資料夾路徑,則指定或不指定資料夾路徑時,可能會更改為"C:\xxxxxx"或"/xxxxxx"格式。
Match User <ユーザー名>
ChrootDirectory <フォルダパス>
示例
Match User TestUser
ChrootDirectory C:\Users\TestUser
保存"sshd_config"後,重新啟動OpenSSH伺服器。
使用公鑰身份驗證從客戶端發送和接收檔
將 SFTP 連接之前創建的私鑰"id_rsa"放在只有運行 SFTP 的使用者才能存取的資料夾中。 請注意,如果將其放在其他人可以訪問的資料夾中,SFTP 連接將失敗。 特別是,如果資料夾具有"使用者"和"所有人"組的許可權,則為NG。
基本上,建議將其放在以下資料夾中,因為它會自動引用路徑。
- C:\users\<使用者名>\.ssh
客戶"。 ssh 資料夾的許可權為「組:SYSTEM」、「組:管理員」和「使用者:<登錄使用者>」。
如果要使用私鑰在 SFTP 中存取它,請輸入以下命令(替換<>部分): 如果設置了密碼短語,請鍵入密碼短語。
sftp -i id_rsa <ユーザー名>@<サーバー名>
成功登錄后,將切換到顯示登錄使用者。
您還可以通過 dir 命令登錄。
現在,您已經擁有了"test3.txt"檔,請使用 put 命令發送該檔。
put c:\temp\test3.txt
通過查看伺服器端的"C:\使用者\自由"資料夾,可以驗證test3.txt 檔是否已發送。
嘗試從客戶端獲取。
get test3.txt c:\temp\test4.txt
我能夠確認我已獲取該檔。
總結
公鑰身份驗證允許 SFTP 發送和接收檔。 使用公鑰可防止伺服器端知道密碼 與密碼身份驗證相比,文件交換更安全。