É possível ter Perl de shell prazo aliases de script?
Pergunta
É possível ter um script Perl aliases shell prazo? Eu estou correndo em uma situação onde temos um módulo Perl que eu não tenho acesso para modificar e uma das coisas que ele faz é registros em vários servidores via SSH para executar alguns comandos remotamente. Infelizmente alguns dos sistemas (que eu também não têm acesso para modificar) tem um servidor SSH de buggy que vai desligar assim que minhas tentativas do sistema para enviar uma chave pública SSH. Eu tenho o agente SSH correr, porque eu preciso dele para conectar a outros servidores.
Meu solução inicial foi a criação de um alias para set ssh para ssh -o PubkeyAuthentication = no, mas Perl corre o ssh binário que encontra no PATH em vez de tentar usar o alias.
Parece que as únicas soluções são desativar o agente SSH, enquanto eu estou ligando para os servidores de problema ou substituir o módulo Perl que faz a conexão real.
Solução
Alter do PATH antes de executar o script perl, ou usar isso em seu .ssh / config
Host *
PubkeyAuthentication no
Outras dicas
Talvez você poderia colocar um comando chamado ssh
em PATH
à frente da ssh
que corre ssh
como você quer que ele seja executado.
Por que você não pule o alias e apenas criar um script shell chamado ssh
em algum lugar diretório, em seguida, altere o caminho para colocar esse diretório antes o que contém o ssh
real?
Eu tive que fazer isso recentemente com iostat
porque a nova saída versão um formato diferente que um produto de terceiros não poderia lidar com (é digitalizada a saída para gerar um relatório).
Acabei de criar um script shell iostat
que chamou a iostat
real (com o caminho codificado, mas você pode ser mais sofisticados), passando a saída através de um script awk
a massageá-lo para o formato original. Então, eu mudei o caminho para o programa de terceiros e começou a trabalhar bem.
Você poderia declarar uma função em .bashrc (ou .profile ou qualquer outro) com esse nome. Ele poderia ser assim (pode quebrar):
function ssh {
/usr/bin/ssh -o PubkeyAuthentication=no "$@"
}
Mas usando um arquivo de configuração pode ser a melhor solução no seu caso.