SSH機能をスクリプト化するときに「接続が拒否されました」エラー

SSH機能をスクリプト化するときに「接続が拒否されました」エラー

fishシェルを使用しており、ショートカットssh機能は次のとおりです。

function sshec2
  ssh -i $HOME/.ssh/key.pem -t -t "ubuntu@$argv[1]"
end

特定のAWS EC2インスタンスにSSHを接続するためのコマンドパイプラインフローを作成しました。

ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
grep 'INSTANCE' |
grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|
head -1 |
sshec2

ただし、実行時に関数が機能しているssh: connect to host port 22: Connection refused間にエラーが発生します。sshec2sshec2 <ec2_public_ip>

私は愚かな部分を逃しましたか?

答え1

私が正しく理解した場合は、ホスト名リスト()を生成するパイプラインがあり、最初の行(ec2-describe-instances … | grep … | grep …head -1を選択して接続するホスト名として使用しようとしています。関数の標準入力にホスト名を渡し、sshec2引数なしで関数を呼び出します。したがって、関数が実行されると$argv[1]空白になり、最終的にはsshパラメータ、、、、-i/home/dearrrfish/.ssh/key.pem実行されます。有効なコマンドラインで終わり、接続が確立されると、パイプの出力は実行中のプログラムにパイプされます。-t-tubuntu@ssh… | head -1ssh

関数の最初のパラメータとしてホスト名を渡す必要があります。これを行うツールは次のとおりです。コマンドの置き換え

sshec2 (ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
        grep 'INSTANCE' |
        grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |
        head -1)

関連情報