Linux

ssh -i (identity_file) 的純文字參數中的密碼

  • April 9, 2021

我知道建議使用 ssh keygen 無需密碼即可登錄,但如果有人以任何方式訪問我的電腦,他們就有可能使用儲存的密鑰登錄到所有伺服器,這很可怕。

因此,我想通過在身份文件上設置密碼,並讓腳本使用隨機的令人難以置信的長而硬的密碼以純文字形式輸入 ssh 登錄,從而稍微模糊該過程。

到目前為止,我已經像這樣生成了一個 ssh-keygen,並將 .pub 的內容複製到伺服器,如下所示:

❯ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/username/.ssh/id_ed25519): testssh
Enter passphrase (empty for no passphrase):          <-- This is NOT empty
Enter same passphrase again:                         <-- This is NOT empty
Your identification has been saved in testssh
Your public key has been saved in testssh.pub
The key fingerprint is:
SHA256:vWch2CbFW50FShjCZDJKW59x7iPdXc44FoYFxmr7XIM username@arch

❯ cat ~/testssh.pub | ssh server_username@10.0.0.25 'cat >> .ssh/authorized_keys'
server_username@10.0.0.25's password: 

現在,它會要求輸入密鑰的密碼,如下所示:

❯ ssh -i testssh server_username@10.0.0.25
Enter passphrase for key 'testssh':

但我想知道這樣的事情是否可行:

❯ ssh -i testssh --passphrase="SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts" server_username@10.0.0.25

所以問題是,我如何使用身份文件和密碼作為參數登錄?

我希望我明白我的意思

假設您使用的是 OpenSSH 客戶端,您可以使用sshpass來執行此操作。

sshpass -P "Enter passphrase for key" \
-pSomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts \
ssh -i testssh server_username@10.0.0.25

當然,僅僅因為你能做到這一點並不意味著你應該這樣做。我敦促您考慮對您的問題提出的意見。

我知道建議使用 ssh keygen無密碼登錄

$$ … $$

所以我想通過在身份文件上設置密碼來稍微模糊一下這個過程,

這聽起來有點矛盾,所以很難說出你想要做什麼。

如果您以互動方式登錄,那麼您可以在使用密鑰/身份文件時輸入密碼。

另一方面,如果您的意思是您需要讓某個無人值守程序可用的密鑰,並且希望將密鑰密碼儲存在同一系統上,那麼您可能根本就沒有密碼。

但是,如果您想避免這樣做,您可以改為在密鑰上設置一個正常(良好)密碼/密碼,並用於ssh-agent保存未加密的密鑰以供無人參與的腳本使用。然後,您只需在每次重新啟動後輸入一次密鑰密碼,雖然未加密的密鑰仍會在系統記憶體中,但攻擊者無法通過竊取驅動器來獲取它。相反,他們必須破壞系統的軟體安全性,或者進行冷啟動攻擊來讀取記憶體內容。

然後,還要在遙控器上的文件中使用強制命令authorized_keys來限制密鑰的用途。

要使密鑰對腳本可用ssh-agent,請啟動代理並在每次重新啟動後將密鑰添加到其中:

# start the agent, the output contains settings needed to talk to it
# and an 'echo' command printing its PID, remove that one here
ssh-agent | grep -ve ^echo > ~/script-agent-info
. ~/script-agent-info

# add the key to the agent, this asks for the passphrase
ssh-add ~/.ssh/script_id_rsa

然後在腳本中

# load the agent settings we stored earlier
. ~/script-agent-info

# use the key
ssh somehost@somewhere

(而不是讓代理為其使用的套接字生成一個隨機名稱,您可以使用ssh-agent -a告訴它路徑,然後SSH_AUTH_SOCK在腳本中設置為該路徑。)

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