bash 脚本无法使用 ssh -i。看不到目录

bash 脚本无法使用 ssh -i。看不到目录

我正在经历一些奇怪的事情。我正在编写一个脚本,通过脚本在服务器上远程安装 Splunk。在此脚本中,我通过 ssh 连接到我的练习服务器(5 个运行 Redhat 的亚马逊 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]"

双引号阻止 shell 扩展~,并将其视为文字(直接传递给ssh)。将其替换为环境变量$HOME,问题就会自行解决:

KEYPAIR="$HOME/Keypairs/jadam-macbookpro-ec2-1.pem"
sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"

我应该指出,ssh将评估~主目录,但在这种情况下,它将在 root 的上下文而不是您的上下文中执行此操作,因此不会在您的$HOME/.ssh目录中查找该文件。

相关内容