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
間にエラーが発生します。sshec2
sshec2 <ec2_public_ip>
私は愚かな部分を逃しましたか?
答え1
私が正しく理解した場合は、ホスト名リスト()を生成するパイプラインがあり、最初の行(ec2-describe-instances … | grep … | grep …
)head -1
を選択して接続するホスト名として使用しようとしています。関数の標準入力にホスト名を渡し、sshec2
引数なしで関数を呼び出します。したがって、関数が実行されると$argv[1]
空白になり、最終的にはssh
パラメータ、、、、-i
で/home/dearrrfish/.ssh/key.pem
実行されます。有効なコマンドラインで終わり、接続が確立されると、パイプの出力は実行中のプログラムにパイプされます。-t
-t
ubuntu@
ssh
… | head -1
ssh
関数の最初のパラメータとしてホスト名を渡す必要があります。これを行うツールは次のとおりです。コマンドの置き換え。
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)