我正在经历一些奇怪的事情。我正在编写一个脚本,通过脚本在服务器上远程安装 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
目录中查找该文件。