编写 SSH 函数脚本时出现“连接被拒绝”错误

编写 SSH 函数脚本时出现“连接被拒绝”错误

我使用的fish是shell,ssh快捷方式功能如下:

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

为了 ssh 到特定的 AWS EC2 实例,我编写了命令管道流:

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)

相关内容