Usando o lftp com o ssh-agent

2

Eu tenho um script que faz login no servidor sftp

eval 'ssh-agent -s'
ssh-add /home/<username>/.ssh/id_rsa
sftp <username>@<target>

Isso funciona, mas eu gostaria de obter apenas arquivos que são mais recentes do que determinada data. Isso não parece ser possível com o sftp, então eu gostaria de usar lftp

Se eu tentar executar o mesmo script com lftp

eval 'ssh-agent -s'
ssh-add /home/<username>/.ssh/id_rsa
lftp <username>@<target>

Eu recebo uma solicitação de senha. É possível usar o lftp com o ssh-agent ou existe alguma outra maneira de evitar o fornecimento da senha?

    
por sjk 29.01.2015 / 12:20

3 respostas

0

sftp e lftp parecem semelhantes, mas têm pouco em comum na "camada de conexão e autenticação". sftp usa SSH para conexão e autenticação e usa o servidor SFTP interno do SSH depois que isso é feito. Em seu modo padrão, lftp se conecta a um servidor FTP e não tem relação com o SSH (portanto, para ssh-agent ). Ele também pode se conectar a servidores SFTP, mas isso não é relevante neste caso.

    
por 29.01.2015 / 13:23
9

Na verdade, é apenas uma verruga do LFTP que até pede a senha. Se você fornecer uma senha simulada, como a string literal DUMMY (por exemplo, lftp sftp://<username>:DUMMY@<target> ), o lftp não solicitará uma senha e verificará posteriormente com o agente ssh. Se você não tiver uma chave configurada, essa senha será usada.

Como alternativa, você pode sobrescrever a configuração sftp:connect-program do lftp para forçar o uso do ssh para um arquivo de chave específico, sem ter que configurar o agente (a senha fictícia ainda será necessária). (Uma maneira) isso pode ser feito assim: lftp sftp://<username>:DUMMY@<target> -e 'set sftp:connect-program "ssh -a -x -i <yourprivatekeyfile>"' .

O sftp:connect-program é a opção que o lftp usa para criar a sessão sftp. O padrão é ssh -a -x , mas pode ser praticamente qualquer comando (consulte a página do manual lftp para obter as restrições exatas). Aqui estou apenas adicionando a opção -i para forçar uma chave privada específica.

(NOTA: todos os <xxx> bits nos exemplos acima devem ser substituídos por valores reais.

Para corrigir algumas coisas na resposta aceita ...

  • não há um servidor FTP interno no SSH; O sftp é seu próprio protocolo, projetado como uma extensão do ssh. Só tem "ftp" no final porque é um protocolo de transferência de arquivos, eles compartilham muito pouco em comum em termos de detalhes.

  • Além disso, embora o LFTP possa se conectar ao FTP diretamente, ele também pode se conectar a uma tonelada outros protocolos. Ao conectar-se ao sftp, ele invoca diretamente o ssh para manipular o estabelecimento da conexão e, portanto, todos os métodos de autenticação ssh normais são aplicados. O comando que o LFTP usa para chamar o ssh pode ser reconfigurado através da sua opção sftp:connect-program (daí a segunda alternativa listada acima).

por 22.05.2015 / 15:43
0

A maneira mais fácil de fazer isso é: lftp -u username, sftp://hostname .

O caractere , após o nome de usuário faz o truque.

    
por 11.07.2018 / 18:54