Pergunta

Eu sei que não é recomendado, mas é possível passar a senha do usuário para o scp?

Eu gostaria de copiar um arquivo via scp como parte de um trabalho em lotes e o servidor de recebimento, claro, precisa de uma senha e, não, eu não posso mudar facilmente de que a chave de autenticação.

Foi útil?

Solução

Você pode criar um script com uma ferramenta como o esperar (há útil ligações também, como Pexpect para Python).

Outras dicas

Utilização sshpass:

sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path

ou então, a senha não é mostrada no bash história

sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path

Acima copia o conteúdo de caminho do host remoto para o seu local.

Instalar :

  • ubuntu/debian
    • apt install sshpass
  • centos/fedora
    • yum install sshpass
  • mac w/ macports
    • port install sshpass
  • mac w/ brew
    • brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master‌​/Library/Formula/ssh‌​pass.rb

basta gerar uma chave ssh como:

ssh-keygen -t rsa -C "your_email@youremail.com"

copie o conteúdo de ~/.ssh/id_rsa.pub e, por último, adicione-o aos computadores remotos ~/.ssh/authorized_keys

certifique-se de que computador remoto tem as permissões 0700 for ~./ssh folder e 0600 for ~/.ssh/authorized_keys

Se você estiver se conectando ao servidor de Windows, Putty versão do scp ("pscp") permite que você passe a palavra-passe com o -pw o parâmetro.

Isso é mencionado na documentação aqui.

Você pode usar o 'esperar' script unix/terminal

Por exemplo, crie o arquivo 'teste.exp' :

#!/usr/bin/expect
        spawn scp  /usr/bin/file.txt root@<ServerLocation>:/home
        set pass "Your_Password"
        expect {
        password: {send "$pass\r"; exp_continue}
                  }

execute o script

expect test.exp 

Espero que ajude.

a curvatura pode ser usado como uma alternativa para o scp para copiar um arquivo e ele suporta uma senha na linha de comando.

curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/

Aqui está um exemplo de como fazê-lo com expect ferramenta:

sub copyover {
    $scp=Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}
+/$file");
    $scp->expect(30,"ssword: ") || die "Never got password prompt from
+ $dest:$!\n";
    print $scp 'password' . "\n";
    $scp->expect(30,"-re",'$\s') || die "Never got prompt from parent 
+system:$!\n";
    $scp->soft_close();
    return;
}

Ninguém mencionou isso, mas Putty scp (pscp) tem -pw opção para a senha.

A documentação pode ser encontrada aqui: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp

  1. certifique-se de que você tem "esperar" ferramenta antes, se não, faça-o de

    # apt-get install expect

  2. criar um arquivo de script com o seguinte conteúdo.(# vi /root/scriptfile)

    spawn scp /path_from/file_name user_name_here@to_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  3. executar o ficheiro de script com "esperar" ferramenta

    # expect /root/scriptfile

Uma vez que você configurar ssh-keygen como explicado acima, você pode fazer

scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

Se você quiser diminuir a escrever cada vez, você pode modificar o seu .bash_profile arquivo e colocar

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

Em seguida, a partir de seu terminal de fazer source ~/.bash_profile.Depois, se você digitar remote_scp no terminal, deve executar o scp comando sem senha.

Você pode usar ssh-copy-id para adicionar a chave ssh:

$which ssh-copy-id #check whether it exists

Se existir:

ssh-copy-id  "user@remote-system"

Uma alternativa seria adicionar o público metade do usuário é a chave para que o autorizado-chaves do arquivo no sistema de destino.No sistema de iniciar a transferência, você pode executar um ssh-agent daemon e adicione o privado metade da chave para o agente.O trabalho em lotes, em seguida, pode ser configurado para usar o agente para obter a chave privada, em vez de pedir a chave da senha.

Este deve ser capaz de fazer em um sistema UNIX/Linux ou no Windows plataforma usando concurso e pscp.

passos para obter sshpass Para rhel/centos 6 :

# wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install sshpass

fonte: https://community.mapr.com/thread/9040

Eu achei isso muito útil resposta aqui.

rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/

Não apenas você pode passar lá a palavra-passe, mas também vai mostrar a barra de progresso durante a cópia.Realmente impressionante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top