SFTP上传脚本,没有密钥

SFTP上传脚本,没有密钥

我需要将文件上传到服务器。

服务器使用 SFTP 上传。身份验证后,禁止执行任何命令,因此我无法直接通过 SSH 进入,我需要直接进入 SFTP 子系统。

例如。

ssh -N [email protected]运行正常,除了我无法使用 SFTP 进行任何操作。

不过,我可以做得很好。sftp [email protected]

问题:我需要自动化,身份验证是键盘交互的,而不是基于密钥的。他们只是说,我连接的服务器不是我的。“这是密码,每周上传文件。”那里没有人知道关于钥匙或类似东西的任何事。

sftp -b批处理脚本不允许键盘交互式验证。

我厌倦了手动上传文件。他们通过未加密的电子邮件发送了 8 个字符的密码,密码末尾包含 3 个相同的数字和一个字典单词(即“Words777”)——让我们假装安全在这里真的不是问题。

我可以仅通过密码来创建 SSH 密钥吗?请记住,我无法访问其他服务器。我可以用某种方式编写脚本吗?我尝试过使用不同的软件包,甚至rsync尝试过上传,但它们都希望直接访问 SSH,而不是直接进入 SFTP 子系统。

答案1

我认为如果你创建一个 ssh 密钥没有使用“密码”保护它,您可以跳过键盘交互部分,从而轻松创建所需的上传脚本。例如参见此处

ssh-keygen -t rsa -C "Your Name" -f your_key

这将创建必要的文件,然后您只需将公共文件(*.pub)复制到远程服务器上。

答案2

安装预计它可让您针对此类情况编写脚本。

sudo apt-get install expect

设置 shell 脚本

#!/bin/bash
HOST=""
USER=""
PASS=""

# Sorry for the offensive "assword", it's to cope with "Password" and "password".

VAR=$(expect -c "
  spawn sftp $USER@$HOST

  expect \"assword:\"
  send \"$PASS\r\"

  expect \"\\\\$\"
  send \"ls\r\"

  expect -re \"$USER.*\"
  send \"exit\"
")

echo "==============="
echo "$VAR"

答案3

使用索卡特

例子:

(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@host",pty,setsid,ctty

相关内容