bashスクリプトはssh -iを使用できません。ディレクトリを表示できません

bashスクリプトはssh -iを使用できません。ディレクトリを表示できません

何か奇妙なことを経験しています。サーバーにSplunkをリモートでインストールするためのスクリプトを作成しています。このスクリプトでは、SSH 経由で実践サーバー(Redhat を実行する 5 つの Amazon 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 [email protected]

スクリプトは失敗しますが、コマンドをコピーして手動で実行すると機能します。最初は権限の問題だと思い、sudoで実行していましたが、ディレクトリが存在しないと思いました。

どんなアイデアがありますか?

ベストアンサー1

実際に解決したコマンドが正しくありません。実際ははい:

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ディレクトリ内のファイルは見つかりません。

おすすめ記事