如何使脚本自动获取密码?

如何使脚本自动获取密码?

我有一个脚本正在sftp从一台服务器到另一台服务器执行一些文件,就像在脚本中script.ksh我有以下几行;

sftp user@ip_address << EOF
cd path
put file1
bye
EOF

当我运行脚本时;

./script.ksh

它要求输入密码,如下所示;

Password:

在这里,我必须手动传递密码,因为这不是无密码连接。

我想让这个脚本自动化,当Password出现提示时,它应该自己获取密码。任何人都可以有任何建议吗?

答案1

尝试这个:

#!/usr/bin/expect

spawn sftp USERNAME@ip_address:/path/to/folder
expect "Password:"
send "PASSWORD\n"
expect "sftp>"
send "put file1\n"
expect "sftp>"
send "bye\n"

或者如果您不想将整个脚本奉献给期望:

#!/bin/sh

expect << 'EOS'
spawn sftp USERNAME@ip_address:/path/to/folder
expect "Password:"
send "PASSWORD\n"
expect "sftp>"
send "put file1\n"
expect "sftp>"
send "bye\n"
EOS

答案2

按照设计,ssh 不允许“嵌入”密码 - 这是因为它具有使用公私密钥对进行非交互式身份验证的机制。

因此,我建议您将其视为您的第一个停靠港。通常它很简单:

  • 在你的客户端上运行ssh-keygen
  • id_rsa.pub其添加~/.ssh/authorized_keys到您的服务器上。

如果由于某种原因这不是一个选项,那么后备选项expect允许您向 ssh 发送密码。

答案3

这真的很容易。特别是当 /etc/hosts 文件包含其他服务器的 IP 和名称时。

首先,生成可以与其他计算机共享的公钥。

ssh-keygen

只需按 Enter 键即可回答这三个问题。

然后,将您的公钥附加到其他服务器,如下所示:

ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host

其中远程主机可以是 /etc/hosts 文件中的名称或 IP 地址。

它将提示您接受其他主机的密钥 - 您回答“是”(不仅仅是 y) 然后它将提示您输入其他服务器的密码。

就是这样。您的密钥现已附加到远程主机的 .ssh/authorized_key 文件中。

要使用它,只需正常运行 scp 或 ssh,您将看到它不再提示您输入远程主机的密码。

答案4

echo "ftping files to destination"
USER='(username)'
PASSWD='(********)'
sftp user@ip_address << EOF
quote USER $USER
quote PASS $PASSWD
cd path
put file1
bye
EOF

相关内容