設置 SSH 密鑰以自動化 scp 的正確方法
我想設置 SSH 密鑰來自動化
scp
作業。我目前的假設是“自動化”意味著沒有密碼的 SSH 密鑰,但我願意接受您的建議。在我問這個問題之前,我做了很多Google搜尋。這是我發現的:
- 許多頁面解釋瞭如何在沒有密碼的情況下配置 SSH 密鑰
- 很少有頁面解釋沒有密碼的 SSH 密鑰的安全含義
因此,這個問題是 Jeff Atwood 所說的“讓網際網路變得更美好”的主要候選人。
出於這個問題的目的,想像一下這個配置:
- 來源1(不受我控制):
user1@host1
- 來源2(不受我控制):
user2@host2
- 來源 X/Y/Z(不受我控制):等。
- 目的地(由我控制):
user3@host3
- 目標:設置“作業”(腳本等)以復製文件
user1@host1
和user2@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 訪問權限的使用者。