使用lftp通过SFTP连接EDI服务器时登录失败问题求助(SAP外部命令场景)
lftp通过SFTP连接EDI服务器时登录失败问题求助(SAP外部命令场景)
各位大佬好,我现在碰到个棘手的问题:需要通过SFTP连接EDI服务器拉取数据,这个服务器比较特殊——文件被读取后会自动删除,所以一开始想把SFTP目录挂载到Linux文件系统的方案直接放弃了,因为mv命令根本来不及完成文件复制。
我不想用用户名密码做认证,所以生成了SSH密钥发给同事配置好了。然后写了下面的shell脚本,打算在OS层面执行(后续要作为SAP外部命令调用):
#!/bin/bash HOST=x.x.x.x PORT=2022 USER=TEST_USER_NAME KEYFILE=/home/srvadm/.ssh/id_rsa REMOTE_DIR=From FM LOCAL_DIR=/output/dev/ eval $(ssh-agent -s) ssh-add $KEYFILE lftp -u $USER sftp://$HOST:$Port "set sftp:connect-program 'sh -a -x'"<<EOF cd $REMOTE_DIR lcd $LOCAL_DIRECTORY mget *.csv bye EOF
但执行后直接报错了,错误信息如下:
Agent pid 18964
Identity added: /home/srvadm/.ssh/id_rsa (srvadm@myserver-2024-02-08)
open: GetPass() failed -- assume anonymous login
cd: Login failed: Password required
ls: ls -l: Log...
明明已经把密钥加到ssh-agent里了,但lftp还是要求输入密码,有没有大佬能帮忙排查下问题出在哪?
可能的问题点及解决方案尝试:
- 变量大小写/名称错误:脚本里的
$Port是小写,但前面定义的端口变量是大写PORT=2022,这会导致端口参数未正确传递;另外$LOCAL_DIRECTORY应该是$LOCAL_DIR,变量名写错会导致本地目录切换失败。先把这些变量名统一修正。 - SFTP连接程序参数错误:
sh -a -x是完全错误的,应该改成ssh -a -x——-a禁用代理转发,-x禁用X11转发,这才是符合ssh连接逻辑的参数。 - lftp密钥认证配置缺失:lftp默认可能不会自动调用ssh-agent的密钥,需要显式启用ssh-agent支持,或者指定密钥文件。可以在lftp会话里添加
set sftp:agent 1强制使用ssh-agent,也可以用set sftp:key-file $KEYFILE直接指定密钥路径。 - 带空格的目录名处理:远程目录
From FM包含空格,cd命令执行时会被解析成两个参数,需要用引号把目录名括起来,比如cd "$REMOTE_DIR"。
修改后的脚本参考:
#!/bin/bash HOST=x.x.x.x PORT=2022 USER=TEST_USER_NAME KEYFILE=/home/srvadm/.ssh/id_rsa REMOTE_DIR="From FM" LOCAL_DIR=/output/dev/ # 启动ssh-agent并加载密钥 eval $(ssh-agent -s) ssh-add $KEYFILE # 修正参数后的lftp命令 lftp -u $USER sftp://$HOST:$PORT <<EOF set sftp:agent 1 set sftp:connect-program 'ssh -a -x' cd "$REMOTE_DIR" lcd "$LOCAL_DIR" mget *.csv bye EOF # 可选:执行完毕后关闭ssh-agent,避免残留进程 ssh-agent -k
另外建议先手动执行ssh -i $KEYFILE -p $PORT $USER@$HOST,确认密钥能正常登录服务器,排除同事那边的配置问题。
要是还有问题,可以补充lftp的详细日志信息,方便进一步排查~
备注:内容来源于stack exchange,提问作者zaveryukha
相关产品推荐
相关产品推荐

