【问题标题】:pass password to sftp in a bash script在 bash 脚本中将密码传递给 sftp
【发布时间】:2012-09-20 07:51:09
【问题描述】:

我想自动化一个 bash 脚本,它使用 sftp 连接到服务器并进行文件传输。我有这个密码,最初我尝试过这个

sftp $acc@$host << EOF
<passwd_here>
cd $dir
get $file
quit
EOF

但它仍然提示输入密码,我必须在提示时手动输入。

搜索SO后,我发现this postexpect的解决方案,我尝试了以下错误:

脚本:

sftp -b cmdfile.txt $acc@$host
expect "Password:"
send "<passwd>\n";
interact

错误:

Permission denied (publickey,keyboard-interactive).

cmdfile.txt

cd $dir
get $file
quit

请告诉我,如何在 bash 脚本中使用密码进行连接?

【问题讨论】:

  • 可以写更好的expect scripts,但我建议在您的客户端主机上安装 sshpass。 sshpass 比 sftp 更安全,更不容易出错。

标签: bash passwords sftp


【解决方案1】:

请尝试以下步骤

lftp -u $user,$pass sftp://$host << --EOF--
cd $directory
put $srcfile
quit
--EOF--

【讨论】:

  • 我以前从未听说过lftp;对于我们这些无法设置 SSH 密钥的人来说,这是一个非常有用的解决方案。谢谢。
【解决方案2】:

对于 scp/sftp,您应该使用基于密钥的身份验证。来自您要验证的用户的公钥复制到服务器上的 ~/.ssh/authorized_keys 文件中,复制到您要登录的用户的主目录中。在客户端以明文形式存储密码不是一个好习惯,你知道 :) 这样你也可以“解决”从提示符读取密码的问题。

【讨论】:

  • 远程主机已提供密码。我无法在主机上设置公钥。请让我知道在脚本中传递它的方式。
  • “远程主机提供密码”是什么意思?如果它为登录用户提供密码,那么登录根本没有意义。如果您能够使用 scp/sftp,那么您可能能够将远程服务器上的公钥复制到远程用户的 ~/.ssh/authorized_keys(或“authorized_keys2”.. 使用 ssh-keygen.. 生成您的密钥。
【解决方案3】:

是的,基于密钥的身份验证是可行的方法。 检查here 以获取某些方向。

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 1970-01-01
    • 2017-06-20
    • 2014-08-18
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多