私は何か奇妙なことを経験しています。スクリプトを介してサーバーにSplunkをリモートインストールするスクリプトに取り組んでいます。このスクリプトでは、練習用サーバー(Redhatを実行している5つのAmazon EC2インスタンス)にSSH接続します。
ただし、スクリプトを実行すると、次のエラーが発生します。
Warning: Identity file ~/Keypairs/jadam-macbookpro-ec2-1.pem not accessible: No such file or directory.
私の最初のステップは、明らかにパスがそこにあることを確認することでした。コマンドrunをコピーして、ターミナルに貼り付けます。キーペアを使用してインスタンスに正常に接続しました。
これが問題のコマンドです。コマンドの前にSudoを付ける場合と付けない場合の両方で試しました。
KEYPAIR="~/Keypairs/jadam-macbookpro-ec2-1.pem"
Sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"
REMOTE_SCRIPTは実行するスクリプトファイルであり、DSTはhostsファイルから取得したサーバーアドレスです。
解決されたコマンドは次のとおりです。
ssh -i ~/Keypairs/jadam-macbookpro-ec2-1.pem [email protected]
スクリプトは失敗しますが、コマンドをコピーして手動で実行することはできます。最初は権限の問題だと思ったので、Sudoで実行しましたが、ディレクトリが存在しないと思われます。
何か案は?
実際、解決されたコマンドは正しくありません。それは本当にこれです:
ssh -i "~/Keypairs/jadam-macbookpro-ec2-1.pem" "[email protected]"
二重引用符は、シェルが~
を展開するのを停止し、そこでリテラルとして扱われます(ssh
に直接渡されます)。これを環境変数$HOME
に置き換えると、問題は自動的に解決します。
KEYPAIR="$HOME/Keypairs/jadam-macbookpro-ec2-1.pem"
Sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"
ssh
は~
をホームディレクトリとして評価することを指摘しておく必要がありますが、この場合は、あなたのコンテキストではなくルートのコンテキストで評価するため、そうではありません。 $HOME/.ssh
ディレクトリでファイルを探します。