Skip to content

Instantly share code, notes, and snippets.

@tavinus
Last active April 1, 2018 00:29
Show Gist options
  • Select an option

  • Save tavinus/931e226aabc913c8b4b5fbd076406b92 to your computer and use it in GitHub Desktop.

Select an option

Save tavinus/931e226aabc913c8b4b5fbd076406b92 to your computer and use it in GitHub Desktop.
Transforms putty certificates to OpenSSH (ppk to pem)
#!/bin/bash
########################################################################
## ppk2pem.sh
##
## Gustavo Arnosti Neves
## 30 / Ago / 2016
##
## Transforma um certifica .ppk (Putty) para .pem (OpenSSH)
## usando o aplicativo puttygen (deve ser instalado na maquina)
##
## O caminho (path) e o nome do arquivo .ppk serao usados como base
## para o arquivo .pem
##
## Exemplo:
## ppk2pem ~/.ssh/meucert.ppk
##
## Arquivo Gerado:
## ~/.ssh/meucert.pem
##
## Instalando esse script na pasta atual do shell:
## wget -q https://gist.githubusercontent.com/tavinus/931e226aabc913c8b4b5fbd076406b92/raw/ -O ./ppk2pem.sh && chmod +x ./ppk2pem.sh
##
########################################################################
PGEN=$(which puttygen)
ret=0
press_continue() {
read -p $'\n'"Pressione qualquer tecla para continuar... "$'\n' -n1 -s
}
if [[ -z $PGEN ]]; then
echo "Erro! Nao foi possivel encontrar o puttygen no sistema."
echo "Talvez voce precise instalar o pacote \"putty-tools\""
echo " -> sudo apt-get install putty-tools"
echo " -> sudo yum install putty-tools"
echo " -> brew install putty"
press_continue
exit 1
fi
have_file() {
if [[ -z $1 ]]; then
echo "Erro:"
echo " Voce precisa fornecer o arquivo a ser transformado."
echo "Uso:"
echo " $0 arquivo_certificado.ppk"
press_continue
exit 2
elif [[ ! -f $1 ]]; then
echo "Erro:"
echo " Arquivo de certificado nao encontrado: $1"
press_continue
exit 3
elif [[ ! "$1" =~ ^..*\.ppk$ ]]; then
echo "Erro:"
echo " O arquivo especificado nao possui a extensao .ppk: $1"
press_continue
exit 4
fi
}
have_file "$1"
ppk_file=$(basename "$1")
ppk_dir=$(dirname "$1")
ppk_path="$ppk_dir/$ppk_file"
pem_file="${ppk_file%.ppk}.pem"
pem_path="$ppk_dir/$pem_file"
"$PGEN" "$ppk_path" -O private-openssh -o "$pem_path" || ret=1
chmod go-rw "$pem_path" || ret=1
if [[ ret -eq 0 ]]; then
echo "Sucesso!"
echo "O arquivo \"$pem_path\" foi criado e teve as permissoes configuradas."
press_continue
exit 0
else
echo "Erro!"
echo "Ocorreu algum erro ao criar ou setar as permissoes do arquivo \"$pem_path\"."
echo "Possiveis causas:"
echo " - Permissoes insuficientes na pasta \"$ppk_dir\"."
echo " - Senha do certificado invalida."
press_continue
exit 5
fi
exit 9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment