我正在编写一个脚本,用来设置私钥文件的权限并通过 ssh 添加它,以便以后可以使用:
echo "Setting up the private SSH key..."
if [[ $EUID > 0 ]]; then
echo "This script needs to be run as root/sudo"
exit 1
fi
#CmdLine Argument Parsing
for i in "$@"; do
case $i in
-k=*|--key=*)
KEY="${i#*=}"
;;
esac
done
if [ ! -e "$KEY" ]; then
echo "Error: The private key file $KEY does not exist"
exit 1
else
echo "Private key found..."
fi
sudo chmod 600 $KEY
echo "Private key permissions set..."
exec ssh-agent bash
eval `ssh-agent -s`
echo "SSH Agent restarted..."
sudo ssh-add $KEY
echo "SSH Key added..."
echo "...done"
脚本正在通过以下方式执行:sudo bash ./myscript.sh --key=~/.ssh/mykey-rsa
。脚本似乎永远无法完成,最后观察到的回显是“私钥权限设置...”。
有人能解释一下这个脚本出了什么问题以及我该如何修复它才能使其按预期运行吗?
问候
答案1
该行启动一个等待用户输入的新进程。该行后面的命令直到进程完成exec ssh-agent bash
才会执行。ssh-agent
如果您想ssh-agent bash
执行某些命令,您应该将它们传递给它的标准输入通道,如下所示:
echo 'echo "hello world"' | ssh-agent bash
这种方式ssh-agent
将执行从 stdin 传来的命令并完成。然后执行以下命令。
编辑:
@8bittree 在评论中正确指出,它exec
实际上并没有启动新进程,而是用新程序替换当前进程中的当前程序,因此在任何情况下都不会执行此命令之后的行。