Eu sei que existem dezenas de perguntas aqui sobre como conectar-se a um servidor SSH sem digitar sua senha todas as vezes , e a resposta é sempre "use uma chave pública". Bem, eu me encontro na rara circunstância em que isso realmente não é uma opção. Por alguma razão inexplicável, o daemon OpenSSH no servidor ao qual estou tentando conectar está configurado com
RSAAuthentication no
PubkeyAuthentication no
no /etc/ssh/sshd_config
. Como não tenho acesso administrativo ao servidor, não posso alterar essas ou outras opções de configuração do servidor. (Obviamente, eu tenho controle total sobre a configuração do cliente: OpenSSH 5.8 no Linux.)
Quais são minhas opções e, em particular, qual é a opção mais segura, para evitar a necessidade de digitar minha senha toda vez que quero fazer o SSH neste servidor? Eu mantenho meus próprios computadores razoavelmente bem protegidos, então vamos assumir que os riscos de segurança de armazenar a senha em um arquivo no cliente são aceitáveis, se isso for realmente necessário.
Os outros métodos de autenticação que o servidor pode aceitar são evidentemente a API GSS (sobre a qual não sei nada), o teclado interativo (sobre o qual também não sei nada) e a senha. Aqui estão algumas opções de configuração relevantes:
#ChallengeResponseAuthentication yes
#KerberosAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
#UsePAM no
e aqui está um -vv
rastreio debug ( ):
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure. Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure. Minor code may provide more information
debug1: Unspecified GSS failure. Minor code may provide more information
debug2: we did not send a packet, disable method
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
/etc/krb5.keytab
? O GSSAPI (Kerberos) pode ser simples de configurar do lado do cliente; Eu teria que pedir o nome do host do servidor, no entanto. (Também:keyboard-interactive
é muito semelhante apassword
, exceto não limitado a um prompt "Senha:".)/etc/krb5.keytab
, mas tem/etc/krb5/krb5.keytab
. Eu não tenho acesso ao conteúdo. O nome do servidor ésftp.pass.psu.edu
(acho que não há nenhum mal em dar esse nome) se ele ajudar a explicar o procedimento.Respostas:
Nesse caso, escrever (ou gravar melhor) um script esperado seria uma de suas opções.
Cada sistema é diferente, portanto, não haverá um script, mas com a autoexpect, é muito fácil gravar um script para esse fim.
fonte
A partir das informações coletadas até o momento, o servidor
sftp.pass.psu.edu
oferece suporte à autenticação Kerberos 5 (GSSAPI) e está nodce.psu.edu
domínio.O Kerberos é muito comum em redes com muitos servidores e estações de trabalho; muitas grandes instituições educacionais o criaram. Uma se suas vantagens sobre a autenticação de chave pública é que um único
kinit
fornece credenciais automaticamente a todas as máquinas no domínio Kerberos, sem a necessidade de copiar as chaves públicas para cada uma. Outro é o suporte ao protocolo - as mesmas credenciais Kerberos podem ser usadas com mais de 30 protocolos (correio, sistemas de arquivos, bancos de dados ...), não apenas SSH.(Em relação a "administradores apenas sem noção do Windows": o
dce.psu.edu
domínio realmente parece ser baseado no Active Directory e hospedado por servidores Windows.)Tente seguir estas etapas:
Faça logon no Kerberos. (As ferramentas
kinit
eklist
podem estar no "krb5-user" ou em um pacote semelhante, se ainda não estiver incluído no sistema.)Se nenhum erro for exibido, o logon foi bem-sucedido.
klist
deve mostrar umkrbtgt/dce.psu.edu@...
item " ".Agora conecte-se ao servidor SSH, com as
-vv
opções; se a autenticação for bem-sucedida, tudo bem.Caso contrário, talvez seja necessário editar seu
/etc/krb5.conf
arquivo. Sob a[domain_realm]
seção, adicione o seguinte:Com as configurações padrão do Krb5, o ticket obtido no nº 1 deve ser válido por 10 horas e renovável por até uma semana. Não tenho como verificar as configurações, no entanto.
Se você deseja manter a senha em um arquivo, um simples
kinit your_principal < password.txt
deve funcionar, embora não seja totalmente confiável.Com
ktutil
isso é possível fazer um "keytab" para uso em vez da senha.e faça login usando:
fonte
ssh -vv
são semelhantes ao rastreamento que eu publiquei, exceto que recebo, emdebug1: Unspecified GSS failure. Minor code may provide more information\n Server not found in Kerberos database
vez da coisa sobre o arquivo de cache de credenciais não ser encontrado.host/sftp.pass.psu.edu
, mas seu nome real deveria ter sidohost/lutz.cac.psu.edu
. Você pode contornar isso adicionando "128.118.2.85 sftp.pass.psu.edu
" a seus / etc / hosts, mas é tipo de feio - seria muito melhor se os administradores fixa o servidor ...host/lutz.cac.psu.edu
ehost/sftp.pass.psu.edu
) em uma única tecla. (As versões anteriores usavam apenas a primeira.) #/etc/hosts
como sugerido eu recebodebug1: Unspecified GSS failure. Minor code may provide more information Generic error (see e-text)
. Nada mais na saída é relevante para o erro.Eu consideraria uma solução mista, onde você digita a senha apenas uma vez e o computador mantém um soquete no servidor SSH remoto. Você pode seguir estas etapas para configurar o
ControlMaster
por exatamente esse motivo.fonte
screen
para proteger as conchas de terminarem na interrupção ou interrupção da conexão.