Como transferir um ficheiro com o sftp no UNIX
Tenho de usar o SFTP para proteger o ficheiro e o modo de transferência. E eu já tenho um script UNIX (.ksh) ficheiro para copiar os ficheiros no modo normal. Como faço para implementar a transferência no modo SFTP?
2 answers
Use sftp
em vez de qualquer comando que esteja a usar no seu .programa do ksh . Ver sftp man para referência.
Você também pode querer olhar para scp
cópia segura - scp man .
Editar
sftp
é principalmente para operações interactivas, você precisa de indicar a máquina a que deseja ligar-se:
sftp example.com
Ser-lhe-á pedido o nome de utilizador e o passsword, e a sessão interactiva começará..
Embora possa ser utilizado em scripts, o scp
é muito mais fácil de usar:
scp /path/to/localfile user@host:/path/to/dest
Ser-lhe-á pedida a senha..
Editar 2
Ambos scp
e sftp
usam {[10] } como protocolo subjacente, ver isto e isto
A melhor maneira de Os configurar a correr dos programas é configurar a autenticação sem senhas usando chaves . Veja isto eisto . Uso isto extensivamente nos meus servidores.. Depois de configurar as chaves, você pode executar
scp -i private-key-file /path/to/local/file user@host:/path/to/remote
sftp -oIdentityFile=private-key-file -b batch-file user@host
Se se quiser autenticar-se com a senha, pode tentar o pacote expect
. O script mais simples pode ser assim:
#!/usr/bin/expect
spawn sftp -b batch-file user@host
expect "*?assword:*"
send "pasword\n"
interact
Enviar comandos através do sftp numa linha:
Criar um ficheiro e gravá-lo como um ficheiro 'my_batch_ file':
cd /root
get blah.txt
bye
Execute isto para executar o seu ficheiro em lote:
eric@dev /home/el $ sftp [email protected] < my_batch_file
Connecting to 10.30.25.15...
Password:
sftp> cd /root
sftp> get blah.txt
Fetching /root/blah.txt to blah.txt
sftp> bye
O ficheiro é transferido
Que moveu o blah.txt
de computador remoto para computador local.
Se não quiser indicar uma senha, faça isto.:
Como executar o comando sftp com uma senha do programa Bash?
Ou se quiseres para o fazer de forma insegura, use bash e espere:
#!/bin/bash
expect -c "
spawn sftp username@your_host
expect \"Password\"
send \"your_password_here\r\"
interact "
Poderá ter de instalar o expect, alterar o texto de 'Password' para minúsculas 'p' para corresponder ao que a sua mensagem recebe. O problema aqui é que ele expõe sua senha em texto simples no arquivo, bem como no histórico de comandos. O que quase invalida o propósito de ter uma senha em primeiro lugar.