【发布时间】:2021-01-24 11:11:31
【问题描述】:
我已经搜索过,但我发现的解决方案只专注于使用单个密钥文件。 假设我有一组需要相同密码的私钥(从安全角度来看,我对这样的设置感到满意)。
我如何制作一个bash 脚本,该脚本从stdin 读取密码并使用相同密码为每个私钥调用ssh-add?
我没有可用于ssh-add 的-p。
我试图避免将密码写入文件(即使是临时的)。 到目前为止,我是带着这个来的,但我不确定该怎么走或者这是否可能:
#!/bin/bash
if [ $(ps ax | grep [s]sh-agent | wc -l) -gt 0 ] ; then
printf "> 'ssh-agent' is running.\n"
else
printf "> 'ssh-agent' needs to be running. Exiting.\n"
exit 0
fi
unset password
prompt="> Please input your password: "
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'\0' ]]
then
break
fi
prompt='*'
password+="$char"
done
printf "\n> Adding key files...\n"
## declare an array variable
declare -a arr=("key-1.ppk" "key-2.ppk" "key-3.ppk")
## now loop through the above array
for i in "${arr[@]}"
do
#echo "$i"
ssh-add "$i" < <(echo "$password")
done
还尝试将以下内容传递给stdin:
echo $password | ssh-add "$i"
我也想过在循环中使用这个:
{
/usr/bin/expect << EOF
spawn ssh-add $HOME/.ssh/$i
send "$password\r"
expect eof
EOF
}
但是它会要求我为每个单独的键输入密码,从而破坏了自动化的目的。
除非有办法让单个spawn ssh-add 通过expect 接收一个密码(只有一个提示)并添加多个密钥?
【问题讨论】:
标签: bash ssh automation