我有一个脚本正在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