我正在尝试通过 unix shell 脚本执行 sftp 并收到错误
Host key verification failed. Connection closed
但是当我像下面这样手动执行 sftp 时,它就可以正常工作
sftp -b batch_file user@remoteserver
batch_file
包含lcd
、cd
和put
命令。
脚本:
#get inputs parameters
file=$1
dir=$2
sftp_node=$3
dest_dir=$4
dol=$
original_dir='eval echo $dol$dir'
dest_dir='eval echo $dol$dest_dir'
cd $original_dir
sfile='ls -lt ${file}* | head -1'
#To execute sftp in batch mode
rm $SCRIPTDIR/sftp_batch_file.txt
echo "lcd $original_dir" > $SCRIPTDIR/sftp_batch_file.txt
echo "cd $dest_dir" >> $SCRIPTDIR/sftp_batch_file.txt
echo "put $sfile " >> $SCRIPTDIR/sftp_batch_file.txt
sftp -oPort=56050 -b $SCRIPTDIR/sftp_batch_file.txt user@servername
s=$?
if [ $s -eq 0]
then
echo "$original_dir/$sfile sent to $dest_dir/$sfile on server"
exit 0
fi
手动运行日志:
OpenSSH_5.3p1,OpenSSL 1.0.1e-fips 2013 年 2 月 11 日 debug1:读取配置数据 /etc/ssh/ssh_config debug1:应用选项 * debug1:连接到服务器 [123.456.789.000] 端口 12345。 debug1:已建立连接。 debug1:身份文件 /home/.ssh/id_rsa 类型 1 debug1:身份文件 /home/.ssh/id_rsa-cert 类型 -1 debug1:身份文件 /home/.ssh/id_dsa 类型 -1 debug1:身份文件 /home/.ssh/id_dsa-cert 类型 -1 debug1:身份文件 /home/.ssh/id_ecdsa 类型 -1 debug1:身份文件 /home/.ssh/id_ecdsa-cert 类型 -1 debug1:远程协议版本 2.0,远程软件版本 SFTP 服务器 debug1:无匹配:SFTP 服务器 debug1:为协议 2.0 启用兼容模式 debug1:本地版本字符串 SSH-2.0-OpenSSH_5.3 debug1:未指定的 GSS 故障。次要代码可能会提供更多信息 未找到凭据缓存文件 '/tmp/krb5cc_3732'
debug1:未指定的 GSS 故障。次要代码可能提供更多信息 未找到凭证缓存文件“/tmp/krb5cc_3732”
debug1:SSH2_MSG_KEXINIT 已发送 debug1:SSH2_MSG_KEXINIT 已接收 debug1:kex:服务器->客户端 aes128-cbc hmac-sha1 无 debug1:kex:客户端->服务器 aes128-cbc hmac-sha1 无 debug1:SSH2_MSG_KEX_DH_GEX_REQUEST(1024<2048<8192) 已发送 debug1:期望 SSH2_MSG_KEX_DH_GEX_GROUP debug1:SSH2_MSG_KEX_DH_GEX_INIT 已发送 debug1:期望 SSH2_MSG_KEX_DH_GEX_REPLY debug1:主机‘[服务器]’:12345 已知并与 RSA 主机密钥匹配。 debug1:在 /home/.ssh/known_hosts:24 中找到密钥 debug1:ssh_rsa_verify:签名正确 debug1:SSH2_MSG_NEWKEYS 已发送 debug1:期待 SSH2_MSG_NEWKEYS debug1:SSH2_MSG_NEWKEYS 已接收 debug1:SSH2_MSG_SERVICE_REQUEST 已发送 debug1:SSH2_MSG_SERVICE_ACCEPT 已接收 debug1:可以继续的身份验证:密码、公钥、键盘交互式 debug1:下一个身份验证方法:公钥 debug1:提供公钥:/home/.ssh/id_rsa debug1:服务器接受密钥:pkalg ssh-rsa blen 277 debug1:读取 PEM 私钥完成:类型 RSA debug1:身份验证成功(公钥)。 debug1:通道 0:新的 [客户端会话] debug1:进入交互式会话。 debug1:发送环境。 debug1:发送环境 LANG = en_US.UTF-8 debug1:发送子系统:sftp sftp> lcd sftp> cd sftp> put filename 将文件名上传到/filename debug1:client_input_channel_req:通道 0 rtype exit-status reply 0 debug1:通道 0:空闲:客户端会话,nchannels 1 debug1:fd 0 清除 O_NONBLOCK 传输:发送 4832,接收 2696 字节,用时 0.6 秒 每秒字节数:发送 8159.3,接收 4552.4 debug1:退出状态 0
脚本运行日志:
OpenSSH_7.5p1,OpenSSL 1.0.2m 2017 年 11 月 2 日 debug1:读取配置数据 /etc/ssh/ssh_config debug1:init_func_ptrs 成功 debug1:krb5 的值为 1 debug1:gssapi 的值为 1 debug1:连接到服务器 [123.456.789.000] 端口 12345。 debug1:已建立连接。 debug1:key_load_public:没有此文件或目录 debug1:身份文件 /home.ssh/identity 类型 -1 debug1:key_load_public:没有此文件或目录 debug1:身份文件 /home.ssh/identity-cert 类型 -1 debug1:为协议 2.0 启用兼容模式 debug1:本地版本字符串 SSH-2.0-OpenSSH_7.5 debug1:远程协议版本 2.0,远程软件版本 SFTP 服务器 debug1:无匹配:SFTP 服务器 debug1:以“用户”身份向服务器:12345 进行身份验证 debug1:SSH2_MSG_KEXINIT 已发送 debug1:SSH2_MSG_KEXINIT 已接收 debug1:kex:算法:diffie-hellman-group-exchange-sha256 debug1:kex:主机密钥算法:ssh-rsa debug1:kex:服务器->客户端密码:aes128-cbc MAC:hmac-sha2-256 压缩:无 debug1: kex:客户端->服务器 密码:aes128-cbc MAC:hmac-sha2-256 压缩:无 debug1:SSH2_MSG_KEX_DH_GEX_REQUEST(2048<8192<8192)已发送 debug1:收到 SSH2_MSG_KEX_DH_GEX_GROUP debug1:SSH2_MSG_KEX_DH_GEX_INIT 已发送 debug1:收到 SSH2_MSG_KEX_DH_GEX_REPLY debug1:服务器主机密钥:ssh-rsa SHA256:U2JlOXEu69uw4l+TGqDBRxnaH+Mjf12WeHc4IGd6lcI debug1:无端口标识符检查 主机密钥验证失败。连接已关闭
请帮助我找出并修复该问题。
答案1
您如何向服务器进行身份验证?sftp 批处理模式无法与交互式身份验证方法一起使用(它不会提示输入用户和密码,您必须在命令行上提供凭据)
如果你的 sftp 使用密码运行:
sftp -b batch_file user:password@remoteserver