Shell-Script
bash 腳本無法使用 ssh -i。看不到目錄
我正在經歷一些奇怪的事情。我正在編寫一個腳本以通過腳本在伺服器上遠端安裝 Splunk。在這個腳本中,我通過 ssh 連接到我的練習伺服器(5 個執行 Redhat 的亞馬遜 EC2 實例)。
但是,當我執行腳本時,出現此錯誤:
Warning: Identity file ~/Keypairs/jadam-macbookpro-ec2-1.pem not accessible: No such file or directory.
我的第一步顯然是確保路徑在那裡。我複制命令執行並將其粘貼到我的終端中。我使用密鑰對成功連接到我的實例。
這是有問題的命令。我已經嘗試過使用和不使用 sudo 前綴命令:
KEYPAIR="~/Keypairs/jadam-macbookpro-ec2-1.pem" sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"
REMOTE_SCRIPT 是要執行的腳本文件,而 DST 是我從主機文件中提取的伺服器地址。
解決的命令是:
ssh -i ~/Keypairs/jadam-macbookpro-ec2-1.pem ec2-user@12.3.4.567
該腳本失敗,但複製命令並手動執行它是可行的。起初我以為是權限問題,所以我用 sudo 執行它,但它認為該目錄不存在。
有任何想法嗎?
實際上,您已解決的命令不正確。真的是這樣:
ssh -i "~/Keypairs/jadam-macbookpro-ec2-1.pem" "ec2-user@12.3.4.567"
雙引號會阻止外殼擴展
~
,並將其視為文字(直接傳遞給ssh
)。將其替換為環境變數$HOME
,問題將自行解決:KEYPAIR="$HOME/Keypairs/jadam-macbookpro-ec2-1.pem" sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"
我應該指出,
ssh
它將評估~
as home directory,但在這種情況下,它將在 root 的上下文而不是您的上下文中執行此操作,因此不會在您的$HOME/.ssh
目錄中查找文件。