Como passar a senha para scp?

sei que não é recomendado, mas é possível passar a senha do utilizador para a scp?

gostaria de copiar um ficheiro via scp como parte de uma tarefa em lote e o servidor de recepção Precisa, claro, de uma senha e, não, não posso mudar isso facilmente para autenticação baseada em Chaves.

Author: Ben Voigt, 2008-09-08

14 answers

Você pode programá-lo com uma ferramenta como expect (também existem ligações úteis, como Pexpect para Python).

 23
Author: Pat Notz, 2017-12-20 15:05:05

Utilizar sshpass:

sshpass -p "password" scp -r [email protected]:/some/remote/path /some/local/path

Ou seja, a senha não aparece no histórico da bash

sshpass -f "/path/to/passwordfile" scp -r [email protected]:/some/remote/path /some/local/path

O Conteúdo acima copia o caminho da máquina remota para o seu local.

Instalar :

  • ubuntu / debian
    • apt install sshpass
  • cêntimos / 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
 357
Author: KevinS, 2017-07-27 07:24:26

Gera apenas uma chave ssh como:

ssh-keygen -t rsa -C "[email protected]"

Copiar o conteúdo de ~/.ssh/id_rsa.pub e, por fim, adiciona-o às máquinas remotas.~/.ssh/authorized_keys

Certifique-se que a máquina remota tem as permissões 0700 for ~./ssh folder e 0600 for ~/.ssh/authorized_keys

 33
Author: mustafaturan, 2015-12-25 11:30:59

Se estiver a ligar-se ao servidor a partir do Windows, a versão Putty do scp ("pscp") permite-lhe passar a senha com o parâmetro -pw.

Isto é mencionado na documentação aqui.

 30
Author: gWay, 2017-01-23 21:33:29

Poderá usar o programa 'expect' no unix / terminal

Por exemplo, criar um teste.Val.:

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

Executa o programa

expect test.exp 
Espero que isso ajude.
 17
Author: Prabhjeet, 2013-01-16 19:28:53

Aqui está um exemplo de como você faz isso 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;
}
 9
Author: Espo, 2014-07-18 12:13:41

O Curl pode ser usado como uma alternativa ao scp para copiar um ficheiro e suporta uma senha na linha de comandos.

curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
 8
Author: MBerg, 2017-11-16 11:28:32

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

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

 6
Author: galushka, 2017-01-23 21:50:27
  1. Certifique-se que tem a ferramenta "esperar" antes, se não, faça-a

    # apt-get install expect

  2. Crie o ficheiro de 'script' a 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. Execute o ficheiro do programa com a ferramenta" esperar "

    # expect /root/scriptfile

 2
Author: Kevin Chui, 2014-03-21 06:04:33

Pode usar ssh-copy-id para adicionar a tecla ssh:

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

Se existe:

ssh-copy-id  "user@remote-system"
 1
Author: Shen JI, 2016-11-22 10:19:25

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

scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/

Se quiser diminuir a dactilografia de cada vez, pode modificar o seu ficheiro .bash_profile e colocar

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/

Depois, a partir do seu terminal do source ~/.bash_profile. Depois, se escrever remote_scp no seu terminal, deverá executar o comando scp sem senha.

 1
Author: hi15, 2017-10-20 07:08:58

Uma alternativa seria adicionar a metade pública da chave do utilizador ao ficheiro de chaves autorizadas no sistema de destino. No sistema do qual você está iniciando a transferência, você pode executar um daemon ssh-agent e adicionar a metade privada da chave para o agente. A tarefa em lote pode então ser configurada para usar o agente para obter a chave privada, em vez de pedir a senha da chave.

Isto deve poder ser feito num sistema UNIX / Linux ou numa plataforma Windows usando o pageant e o pscp.

 0
Author: rjray, 2008-09-16 08:16:54

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

 -2
Author: Long, 2018-02-19 18:17:31

Achei esta resposta muito útil aqui .

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

Não só você pode passar lá a senha, mas também irá mostrar a barra de progresso ao copiar. Sensacional.

 -9
Author: valk, 2017-04-13 12:22:45