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.
14 answers
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/sshpass.rb
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
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
.
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.
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;
}
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/
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
-
Certifique-se que tem a ferramenta "esperar" antes, se não, faça-a
# apt-get install expect
-
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
-
Execute o ficheiro do programa com a ferramenta" esperar "
# expect /root/scriptfile
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"
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.
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.
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