Como passar a senha para o scp?
-
09-06-2019 - |
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.
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/sshpass.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.
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
certifique-se de que você tem "esperar" ferramenta antes, se não, faça-o de
# apt-get install expect
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
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
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.