在客戶端和伺服器上使用公鑰身份驗證設置和驗證 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已釋放

在用戶端上創建私鑰和公鑰

登錄到用戶端。 私鑰和公鑰也可以由伺服器端創建,公鑰由伺服器擁有。 在客戶端創建。

使用管理許可權啟動電源外殼。

image

建立檔案後,使用 cd 命令導航到任何資料夾,然後鍵入以下命令:

ssh-keygen -t rsa -f id_rsa

密鑰包含密碼(密碼),因此,如果需要,請輸入密碼。

image

如果金鑰產生成功,將顯示以下資訊,並在資料夾中建立公鑰和私鑰: "id_rsa"是私鑰,"id_rsa.pub"是公鑰。

image

image

將公鑰放在伺服器上

使用SFTP帳戶登錄到伺服器。

將建立的公鑰「id_rsa.pub」放在伺服器的以下資料夾中: 「. 如果沒有 ssh 資料夾,請建立它。 此外,將檔名更改為"authorized_keys"。 (<>替換為使用 SFTP 登錄的使用者名。

  • C:\users\<使用者名>\.ssh

image

請注意,只有具有管理員許可權或 SFTP 使用者才能訪問此檔。 如果其他使用者具有訪問許可權,則 SFTP 連接始終失敗。 例如,如果許可權包含"使用者"或"所有人"組,則為NG。

對於此示例,請參閱。 ssh 資料夾的許可權為「組:SYSTEM」、「組:管理員」和「使用者:最自由」。 如果無法刪除許可權,請禁用許可權繼承。

在伺服器上啟用公鑰身份驗證

使用管理員權限的使用者登入伺服器並開啟以下資料夾:

  • C:\ProgramData\ssh

由於存在名為"sshd_config"的檔,因此請複製該檔,將檔名更改為"sshd_config_default",然後進行備份。

image

在以管理許可權啟動的文本編輯器中打開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伺服器。

image

使用公鑰身份驗證從客戶端發送和接收檔

將 SFTP 連接之前創建的私鑰"id_rsa"放在只有運行 SFTP 的使用者才能存取的資料夾中。 請注意,如果將其放在其他人可以訪問的資料夾中,SFTP 連接將失敗。 特別是,如果資料夾具有"使用者"和"所有人"組的許可權,則為NG。

基本上,建議將其放在以下資料夾中,因為它會自動引用路徑。

  • C:\users\<使用者名>\.ssh

客戶"。 ssh 資料夾的許可權為「組:SYSTEM」、「組:管理員」和「使用者:<登錄使用者>」。

如果要使用私鑰在 SFTP 中存取它,請輸入以下命令(替換<>部分): 如果設置了密碼短語,請鍵入密碼短語。

sftp -i id_rsa <ユーザー名>@<サーバー名>

image

成功登錄后,將切換到顯示登錄使用者。

image

您還可以通過 dir 命令登錄。

image

現在,您已經擁有了"test3.txt"檔,請使用 put 命令發送該檔。

put c:\temp\test3.txt

image

通過查看伺服器端的"C:\使用者\自由"資料夾,可以驗證test3.txt 檔是否已發送。

image

嘗試從客戶端獲取。

get test3.txt c:\temp\test4.txt

image

我能夠確認我已獲取該檔。

image

總結

公鑰身份驗證允許 SFTP 發送和接收檔。 使用公鑰可防止伺服器端知道密碼 與密碼身份驗證相比,文件交換更安全。