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

Jos*_*hua 2 osx ssh shell-script

我正在经历一些奇怪的事情。我正在编写一个脚本,通过脚本在服务器上远程安装 Splunk。在这个脚本中,我通过 ssh 连接到我的练习服务器(运行 Redhat 的 5 个亚马逊 EC2 实例)。

但是,当我运行脚本时,出现此错误:

Warning: Identity file ~/Keypairs/jadam-macbookpro-ec2-1.pem not accessible: No such file or directory.

我的第一步显然是确保路径在那里。我复制命令 run 并将其粘贴到我的终端中。我使用密钥对成功连接到我的实例。

这是有问题的命令。我已经尝试过在命令前加上和不加上 sudo 前缀:

KEYPAIR="~/Keypairs/jadam-macbookpro-ec2-1.pem"
sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"
Run Code Online (Sandbox Code Playgroud)

REMOTE_SCRIPT 是要运行的脚本文件,而 DST 是我从主机文件中提取的服务器地址。

解决的命令是:

ssh -i ~/Keypairs/jadam-macbookpro-ec2-1.pem ec2-user@12.3.4.567
Run Code Online (Sandbox Code Playgroud)

脚本失败,但复制命令并手动执行它是可行的。一开始我以为是权限问题,这就是我用sudo运行它的原因,但它认为该目录不存在。

有任何想法吗?

roa*_*ima 12

其实你解决的命令是不对的。真的是这样的:

ssh -i "~/Keypairs/jadam-macbookpro-ec2-1.pem" "ec2-user@12.3.4.567"
Run Code Online (Sandbox Code Playgroud)

双引号停止 shell 扩展~,它在那里被视为文字(直接传递给ssh)。将其替换为环境变量$HOME,问题将自行解决:

KEYPAIR="$HOME/Keypairs/jadam-macbookpro-ec2-1.pem"
sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"
Run Code Online (Sandbox Code Playgroud)

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