sshpass: 命令未找到错误

22

我正在尝试自动化从一个服务器到另一个服务器的文件传输或FTP。

#!/bin/bash
### In this model, the same filename is processed on each run.
### A timestamp is added to the result file and data file is copied to the archive or error folder with a timestamp after processing.

# Set current directory
cd `dirname "$0"`

# Set the environment variables
. ./Environment.sh $0

#######################################################################################################
# 
#######################################################################################################


FILE=/hcm/Inbound/file.csv

sshpass -p 'xyz' sftp -oBatchMode=no -b - -oStrictHostKeyChecking=no zys@192.abc.taleo.net <<_EOF_

cd /upload/

put $FILE

_EOF_

# Exit
exit $?

当我执行这个shell脚本时,在putty中会得到以下错误信息:
 -bash: sshpass: command not found

我尝试使用ssh无密码方法,通过 ssh-keygen -t dsa 和其他步骤,但是由于无法访问第二台服务器的putty,我无法执行下一步操作。

请帮忙解决。


无法访问第二个服务器的putty?请原谅?您可以通过将密钥加载到代理中(顺便说一下,RSA密钥优于DSA)并启用代理转发来通过多次跳跃使用无密码SSH;您不需要在跳跃主机上实际拥有私钥。 - Charles Duffy
顺便提一下,exit $? 是完全多余的:exit 默认情况下会传递立即前一个命令的退出状态。此外,你在这里缺少了相当多的引用—— http://shellcheck.net/ 会识别出来。 - Charles Duffy
3个回答

50

在运行代码的客户端服务器上,你需要安装sshpass工具,这是大多数Linux发行版默认未安装的工具。

如果你使用Ubuntu系统,可以使用以下命令:

apt-get install sshpass

如果是CentOS或RedHat系统,请执行以下步骤:

安装EPEL源

wget https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -ivh epel-release-6-8.noarch.rpm

安装sshpass

yum --enablerepo=epel -y install sshpass

谢谢


我编辑了答案,包括在CentOS/RedHat上安装的方法,你使用什么操作系统? - Hani
Red Hat Enterprise Linux Server 6.6(Santiago) - sreekem bose
wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm --2021-02-20 14:41:20-- http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 正在解析 download.fedoraproject.org... 209.132.190.2, 67.219.144.68, 38.145.60.21, ... 正在连接 download.fedoraproject.org|209.132.190.2|:80... 已连接。 HTTP 请求已发送,正在等待回应... 404 Not Found 2021-02-20 14:41:20 错误 404: Not Found。 - s.patra
这个有被改变过吗? - s.patra
@s.patra,我更新了链接,旧链接已经失效,所以我放上了新链接。 - Hani
显示剩余8条评论

8

不要安装sshpass! sshpass不是您需要的正确工具。

它并不适合您的用例,如果您使用它,那么您的脚本将比其应有的安全性低很多。我知道我在说什么,因为我就是写这个工具的人。

相反地,请运行带有调试信息的服务器,并找出为什么您无法设置基于密钥的身份验证。这比在各种场景下使用sshpass更可取。


我在服务器2上没有访问Putty的权限。 - sreekem bose
然后你要在谷歌上搜索“设置公钥认证”,并使用-vv参数运行ssh以查看它尝试的身份验证方法,如果所有其他方法都失败了,你可以询问为什么公钥不起作用(假设没有其他7283093次人们问过同样的问题能帮助到你)。在可以使用公钥身份验证的情况下,请勿使用sshpass - Shachar Shemesh
谢谢!Hani建议的方法有效!所以我认为我的问题已经得到解答 :) - sreekem bose
通常我会同意,但我们中的一些人无法控制我们正在尝试连接的主机的管理。在我的情况下,我很想使用SSH AuthorizedKeys方法,但我们的管理员拒绝这样做,坚持使用密码。 - Woodsman

3

我为CentOS 7提供了一种解决方案:

  1. 这里下载sshpass。

将会下载rpm文件。

  1. 将此rpm文件传输到您的Linux系统(您可以使用FileZilla等工具)。
  2. 使用以下命令安装RPM:yum install <rpm文件名>

完成


2
sshpass 的链接已经失效。更新后的链接 - francis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接