Shell-Script

bash 腳本無法使用 ssh -i。看不到目錄

  • September 24, 2019

我正在經歷一些奇怪的事情。我正在編寫一個腳本以通過腳本在伺服器上遠端安裝 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目錄中查找文件。

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