SFTP无法通过unix shell脚本运行


-1

我试图通过unix shell脚本执行sftp并获取错误

Host key verification failed. Connection closed

但是当我像下面那样手动执行sftp时,它正在工作

sftp -b batch_file user@remoteserver

batch_file包含lcdcdput命令。

脚本:

#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:identity file /home/.ssh/id_rsa type 1 debug1:identity file /home/.ssh/id_rsa-cert type -1 debug1:identity file /home/.ssh/id_dsa type -1 debug1:identity file / 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:server-> client aes128-cbc hmac-sha1 none debug1:kex:client-> server aes128-cbc hmac-sha1 none 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:主机'[server]':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:认证可以继续:password,publickey ,keyboard-interactive debug1:下一个身份验证方法:publickey debug1:提供公钥:/home/.ssh/id_rsa debug1:服务器接受密钥:pkalg ssh-rsa blen 277 debug1:读取PEM私钥完成:输入RSA debug1:认证成功(publickey)。debug1:channel 0:new [client-session] debug1:进入交互式会话。debug1:发送环境。debug1:发送env LANG = en_US.UTF-8 debug1:发送子系统:sftp sftp> lcd sftp> cd sftp> put filename将文件名上传到/ filename debug1:client_input_channel_req:channel 0 rtype exit-status reply 0 debug1:channel 0:free :客户端会话,nchannels 1 debug1:fd 0清除O_NONBLOCK传输:发送4832,接收2696字节,0.6秒字节每秒:发送8159.3,收到4552.4 debug1:退出状态0 身份验证成功(publickey)。debug1:channel 0:new [client-session] debug1:进入交互式会话。debug1:发送环境。debug1:发送env LANG = en_US.UTF-8 debug1:发送子系统:sftp sftp> lcd sftp> cd sftp> put filename将文件名上传到/ filename debug1:client_input_channel_req:channel 0 rtype exit-status reply 0 debug1:channel 0:free :客户端会话,nchannels 1 debug1:fd 0清除O_NONBLOCK传输:发送4832,接收2696字节,0.6秒字节每秒:发送8159.3,收到4552.4 debug1:退出状态0 身份验证成功(publickey)。debug1:channel 0:new [client-session] debug1:进入交互式会话。debug1:发送环境。debug1:发送env LANG = en_US.UTF-8 debug1:发送子系统:sftp sftp> lcd sftp> cd sftp> put filename将文件名上传到/ filename debug1:client_input_channel_req:channel 0 rtype exit-status reply 0 debug1:channel 0:free :客户端会话,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 success debug1:krb5的值为1 debug1:gssapi的值为1 debug1:连接服务器[123.456.789.000]端口12345. debug1:建立连接。debug1:key_load_public:没有这样的文件或目录debug1:identity file /home.ssh/identity type -1 debug1:key_load_public:没有这样的文件或目录debug1:identity file /home.ssh/identity-cert type -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:algorithm:diffie-hellman-group-exchange-sha256 debug1:kex:主机密钥算法:ssh-rsa debug1:kex:server-> client cipher:aes128-cbc MAC:hmac-sha2-256 compression:none debug1:kex:client->服务器密码: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:检查没有端口标识符主机密钥验证失败。连接已关闭 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:不检查端口标识符主机密钥验证失败。连接已关闭 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:不检查端口标识符主机密钥验证失败。连接已关闭

请帮我识别并解决问题。


如果您希望得到答案,则应提供更多详细信息。
RalfFriedl

当您“手动执行sftp”时,不使用-oPort=56050
Martin Prikryl

如果我没有看到oPort,它会抛出错误,因为端口#是允许的。甚至手动,我使用oPo​​rt
先生BB

所以编辑你的问题来表明这一点。oPort问题中的手动命令中没有。
Martin Prikryl

-v可以在手动和脚本中添加开关并向sftp我们显示其输出。
Martin Prikryl

Answers:


0

你如何通过服务器进行身份验证?sftp批处理模式无法使用交互式身份验证方法(它不会提示用户和密码,您必须在命令行上提供凭据)

如果您的sftp使用密码运行:

sftp -b batch_file user:password@remoteserver

我想在没有对脚本中的密码进行硬编码的情况下执行sftp。我改变了我的脚本,就像这个sftp user @ server << EOF; lcd source_dir; cd dest_dir; 放文件; EOF
BB先生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.