Nome de usuário e senha na linha de comando com sshfs

10

Estou criando um pequeno script de backup usando sshfs :

sshfs backup_user@target_ip:/home /mnt/backup

Existe uma maneira de incluir a senha neste comando?

Ou há outra solução de transferência de arquivos em que a senha de login possa ser incluída além de FTP / SFTP?

    
por Zaza 15.01.2017 / 01:10

5 respostas

12

De acordo com o manual, há uma opção -o password_stdin que pode permitir a leitura da senha da entrada padrão, que provavelmente pode ser um redirecionamento. Eu nunca usei isso, então estou especulando.

Dito isto, aconselho veementemente contra essa solução que é inerentemente insegura.

ssh funciona muito bem com um sistema de chaves privadas / públicas. É simples e seguro. Não é necessário digitar uma senha ou escrevê-la em um shell script. Basta pressionar sua chave pública no servidor e você pode se conectar imediatamente.

    
por 15.01.2017 / 01:26
6

-o password_stdin parece não estar funcionando em todos os sistemas, por exemplo o freeBSD. etc

Você também pode usar expect Interpreter, deve funcionar com sshfs e deve fazer o truque.

Outra solução seria sshpass , por exemplo, digamos que você esteja fazendo o backup do diretório / var / www

Backup:

name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www

fazendo upload do arquivo de backup para o servidor de backup

sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name

Por isso, fará o upload do diretório com o backup de hoje

Mas ainda, como foi dito acima, a melhor maneira (segura e simples) seria usar o par de chaves ssh | O único inconveniente é que você terá que passar pelo processo de geração de chaves uma vez em cada servidor que precisar emparelhar, mas é melhor do que manter uma senha em formato de texto simples em todos os servidores que você deseja fazer backup :),

Gerando uma chave Pareia o caminho correto

  • No servidor local

    ssh-keygen -t rsa
    
  • No servidor remoto

    ssh root@remote_servers_ip "mkdir -p .ssh"
    
  • Fazendo upload de chaves públicas geradas para o servidor remoto

    cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
    
  • Definir permissões no servidor remoto

    ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
    
  • Login

    ssh root@remote_servers_ip
    
  • Ativando o protocolo SSH v2

    uncomment "Protocol 2" in /etc/ssh/sshd_config

  • habilitando a autorização de chave pública no sshd

    uncomment "PubkeyAuthentication yes" in /etc/ssh/sshd_config

  • Se o StrictModes estiver definido como sim em / etc / ssh / sshd_config, então

    restorecon -Rv ~/.ssh
    
por 15.01.2017 / 05:19
3

Piping o "sshfs password" com <<< para -o password_stdin funciona no bash:

sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< "sshfs password"
    
por 24.07.2017 / 04:03
0
echo 'password' | sshfs user@host:/dir /mnt -o password_stdin

A opção "-o password_stdin" é o que permite que você envie sua senha.

Dito isto, as chaves são uma opção melhor, a menos que o seu provedor de serviços não permita usá-las para o sftp. (Esta é uma das falhas notáveis do WP Engine.)

    
por 06.06.2017 / 04:17
0

uma coisa a ter em mente é que, se você estiver usando a opção -o password_stdin , pode parecer que não está funcionando porque o sshfs perguntará se deseja se conectar ao host ou não (se for a primeira vez que você se conecta a ele e não é adicionado ao arquivo de hosts conhecidos ainda). Se você estiver executando em um lote, você nunca verá o sshfs perguntando. Soluções alternativas para evitar isso são:

  1. adicione a opção -o StrictHostKeyChecking=no ao sshfs ou
  2. execute sshfs manualmente uma vez para adicionar o host ao arquivo de hosts conhecidos
por 31.05.2018 / 13:16

Tags