如何在没有交互的情况下将一台服务器 sftp 到另一台受密码保护的服务器?

如何在没有交互的情况下将一台服务器 sftp 到另一台受密码保护的服务器?

我想将sftp文件从一台服务器传输到另一台服务器,并且我想将其包含在脚本中。但问题是目标服务器是受密码保护的服务器。因此,当出现密码提示时,需要输入密码。

如果我将其包含在脚本中,我不需要任何用户交互。它应该自己获取密码。 (我知道密码,我怎样才能将其包含在脚本中以便它自动获取

有人可以帮忙吗?谷歌了很多,但没有找到合适的答案。我无法减少连接密码,因为我正在生产服务器中工作。所以我无法对服务器进行任何修改。但我希望我的脚本应该自行处理。请帮忙。

答案1

你想要的听起来很像 ssh-keys。这允许您创建不需要输入密码的“可信”网络。这还为您提供了额外的安全性,以便您的脚本中不会有纯文本的密码。

在源机器上:

ssh-keygen -t rsa -b 2048
Enter file in which to save the key (/root/.ssh/id_rsa): [Hit Enter]
Enter passphrase (empty for no passphrase): [Hit Enter]
Enter same passphrase again: [Hit Enter]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

现在将公钥复制到目标服务器:

ssh-copy-id [email protected]
[OR]
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

现在在你的脚本中:

sftp -o "IdentityFile=/root/.ssh/id_rsa" [email protected]

或者你可以这样做:

read -s -p "Enter Password: " password
sshpass -p $password sftp [email protected]

在哪里:

  • -s:不在屏幕上显示密码
  • -p:“密码:”:显示文本消息
  • 密码:存储密码的 Bash 变量

相关内容