Security

設置 SSH 密鑰以自動化 scp 的正確方法

  • January 22, 2013

我想設置 SSH 密鑰來自動化scp作業。我目前的假設是“自動化”意味著沒有密碼的 SSH 密鑰,但我願意接受您的建議。

在我問這個問題之前,我做了很多Google搜尋。這是我發現的:

  • 許多頁面解釋瞭如何在沒有密碼的情況下配置 SSH 密鑰
  • 很少有頁面解釋沒有密碼的 SSH 密鑰的安全含義

因此,這個問題是 Jeff Atwood 所說的“讓網際網路變得更美好”的主要候選人。

出於這個問題的目的,想像一下這個配置:

  • 來源1(不受我控制):user1@host1
  • 來源2(不受我控制):user2@host2
  • 來源 X/Y/Z(不受我控制):等。
  • 目的地(由我控制):user3@host3
  • 目標:設置“作業”(腳本等)以復製文件user1@host1user2@host2 (等)以user3@host3使用scp

我已經知道:

  • ssh-keygen生成 SSH 密鑰
  • SSH 密鑰可以有空/無密碼
  • ~/.ssh/id_dsa有私鑰
  • ~/.ssh/id_dsa.pub有公鑰
  • 複製~/.ssh/id_dsa.pub~/.ssh/authorized_keys並仔細設置其文件權限
  • 與其他使用者/主機共享內容~/.ssh/id_dsa.pub以使用scp

在我自己在不同主機/使用者之間的測試中,我知道我的設置有效。

令我困擾的是安全隱患。而且,我承認我不是 Linux 管理員,也不是安全專家。

  • 如果我將此公共 SSH 密鑰提供給另一個部門使用scp,如果相同的密鑰洩露/失去/被盜到另一個部門怎麼辦?
  • 這是否意味著任何有權訪問此公共 SSH 密鑰的人都可以scp沒有host3密碼的情況下使用?user3

您的回复需要考慮的重要假設:

  • 我不關心通過更廣泛的網際網路進行的外部黑客。這些是安全公司網路上的 Linux 機器。
  • 我無法設置其他使用者 ID。

我猜有一種方法可以限制對特定 SSH 密鑰的訪問,但我不知道如何。也許~/.ssh/authorized_keys選項(我今天剛剛學到的)?是否可以有多個 SSH 密鑰——為每個源提供不同的密鑰?

請告知正確的方法。

user3@host3 可以擁有任意數量的 ssh 公鑰,以授予對其帳戶的訪問權限。有些可以受密碼保護,有些則不能。

每個密鑰都有公共和私有部分。密鑰將由 user1 和 user2 生成,公開的一半將提供給 user3。然後,使用者 3 可以將這些密鑰添加到他們的 authorized_keys 文件中。密鑰是否受密碼保護由私鑰決定,而不是由公鑰決定。因此,如果 user1 為 user3 提供了一個公鑰,他們無法判斷它是否受密碼保護,AFAIK。

您可以在單個機器上的 authorised_keys 文件中執行一些限制,如“authorized_keys:限制訪問部分”中所述

比如說你想確保 user1 只能從 host1 和 user2 從你可以輸入的 host2 連接

from="host1" <user1 public key>
from="host2" <user2 public key>

那麼如果使用者 1 或使用者 2 的私鑰被洩露或被盜,他們將無法從任何其他機器連接。

不確定這有多好,但可能值得您研究scponly,它看起來可以防止 shell 訪問您只想擁有 scp 訪問權限的使用者。

引用自:https://serverfault.com/questions/471324