Ssh

“-”在“ssh-keygen -lf -”命令中是如何工作的?

  • October 5, 2022

我讀了這個問題

在答案和解決方案中出現以下命令(在此處改編以用於展示目的)

ssh-keyscan 192.168.1.X | ssh-keygen -lf -

我知道隔離的第一個命令顯示public keys了主機的。當完整的命令被執行時——因此是兩個部分——根據最終輸出,第一個命令的公鑰用於生成自己的指紋

問題

  • -在命令中如何工作ssh-keygen -lf -

這是強制性的。我知道l是顯示指紋f定義文件名,但如何解釋-

預設情況下,ssh-keygen -l會以互動方式詢問您要顯示指紋的公鑰文件。用-f你給它一些現有文件的路徑名。

如果路徑名是-(破折號),則從標準輸入而不是從文件中讀取輸入。

這是一種常見的做法,很多其他命令也遵循,最值得注意的是catcat -從標準輸入讀取)。

在您的管道中,標準輸入上的數據由ssh-keyscan命令提供。該ssh-keyscan命令將提取提到的主機的公鑰並將其傳遞給ssh-keygen -l. 該ssh-keygen實用程序將輸出指紋。

如果沒有 -f -,該ssh-keygen實用程序將嘗試使用 的輸出ssh-keyscan作為文件名來讀取密鑰。

這可以說是糟糕的設計,因為很容易以程式方式確定程序的輸入是來自終端還是來自非終端的東西(如另一個命令或文件)。所以從某種意義上說,-f - 可能是不必要的。

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