[movido do StackOverflow]
Usamos PSFTP, junto com um arquivo ppk e um arquivo de comando em lote, para carregar um CSV para um host SFTP remoto. Isso tem funcionado por muitos (muitos) meses e só recentemente o parâmetro -b falhou com "Fatal: unable to open"
Detalhes:
Executamos PSFTP.exe no Windows usando um arquivo em lote ou prompt de comando.
O arquivo de comando em lote que passamos com o parâmetro -b é chamado "sftpcommands.txt" e tem as seguintes linhas:
put "D:\batch\Upload.csv"
quit
Aqui está o que executamos a partir de um arquivo em lote ou prompt de comando:
psftp.exe -v -P 22 -i D:\batch\keyfile.ppk -b D:\batch\sftpcommands.txt [email protected]
Aqui está o resultado:
Looking up host "SFTPHost.domain.com" for SSH connection
Connecting to hostIP port 22
We claim version: SSH-2.0-PuTTY_Release_0.82
Connected to hostIP (from localIP:35022)
Remote version: SSH-2.0-AWS_SFTP_1.1
Using SSH protocol version 2
No GSSAPI security context available
Doing ECDH key exchange with curve nistp256, using hash SHA-256 (SHA-NI accelerated)
Host key fingerprint is:
ssh-rsa 4096 SHA256:ajIF+morestuffhere
Initialised AES-256 SDCTR (AES-NI accelerated) outbound encryption
Initialised HMAC-SHA-256 (SHA-NI accelerated) outbound MAC algorithm
Initialised AES-256 SDCTR (AES-NI accelerated) inbound encryption
Initialised HMAC-SHA-256 (SHA-NI accelerated) inbound MAC algorithm
Reading key file "D:\batch\keyfile.ppk"
Using username "OurUser".
Offered public key
Offer of public key accepted
Authenticating with public key "keynameinformation here"
Sent public key signature
Access granted
Opening main session channel
Remote debug message: SFTP: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
Remote debug message: SFTP: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
Opened main channel
Started a shell/command
Connected to some-host.server.transfer.us-east-1.amazonaws.com
Remote working directory is /
Fatal: unable to open
Session sent command exit status 0
Main session channel closed
All channels closed
Agora a parte estranha: podemos nos livrar da sintaxe do script -b e inserir manualmente os mesmos comandos encontrados no sftpcommands.txt
arquivo quando o psftp>
prompt aparecer (por exemplo):
psftp.exe -v -P 22 -i D:\batch\keyfile.ppk [email protected]
Looking up host "SFTPHost.domain.com" for SSH connection
Connecting to hostIP port 22
We claim version: SSH-2.0-PuTTY_Release_0.82
Connected to hostIP (from localIP:35022)
Remote version: SSH-2.0-AWS_SFTP_1.1
Using SSH protocol version 2
No GSSAPI security context available
Doing ECDH key exchange with curve nistp256, using hash SHA-256 (SHA-NI accelerated)
Host key fingerprint is:
ssh-rsa 4096 SHA256:ajIF+morestuffhere
Initialised AES-256 SDCTR (AES-NI accelerated) outbound encryption
Initialised HMAC-SHA-256 (SHA-NI accelerated) outbound MAC algorithm
Initialised AES-256 SDCTR (AES-NI accelerated) inbound encryption
Initialised HMAC-SHA-256 (SHA-NI accelerated) inbound MAC algorithm
Reading key file "D:\batch\keyfile.ppk"
Using username "OurUser".
Offered public key
Offer of public key accepted
Authenticating with public key "keynameinformation here"
Sent public key signature
Access granted
Opening main session channel
Remote debug message: SFTP: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
Remote debug message: SFTP: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
Opened main channel
Started a shell/command
Connected to some-host.server.transfer.us-east-1.amazonaws.com
Remote working directory is /
psftp> put "D:\batch\Upload.csv"
local:D:\batch\Upload.csv => remote:/Upload.csv
psftp> quit
Session sent command exit status 0
Main session channel closed
All channels closed
O terceiro moveu os servidores SFTP alguns meses atrás, mas, até onde sei, o parâmetro -b ainda estava funcionando no novo host (no entanto, posso estar errado).
Até onde sei, nada mudou do nosso lado e, como indicado, estamos fazendo testes A/B com o mesmo usuário local do Windows conectado, os mesmos arquivos locais, etc. Não deve haver problemas de direitos locais, pois, novamente, estamos usando o Windows, e a conta conectada é o que está abrindo/editando/acessando todos os arquivos envolvidos. Também tentei mover o parâmetro -b para posições diferentes na linha de comando.
Esse erro pode ser uma configuração de segurança, formato ou configuração no servidor SFTP remoto que está causando confusão com o arquivo de comando -b?
Observação: tenho um tíquete aberto com o pessoal que opera o host SFTP remoto para triangular o problema e, se eu puder resolver isso, postarei a resposta aqui, caso ajude outra pessoa a ver o "Fatal: não é possível abrir" na opção -b.