我需要连接到 EDI 服务器并通过 sftp 获取数据。这是一个不寻常的 ftp 服务器。这是一个特殊的服务器,在读取后会删除文件。我们放弃了将 sftp 文件夹挂载到 linux 文件系统的最初想法,因为 mv 命令没有时间复制文件。我不想使用用户名和密码进行身份验证,但我想使用 ssh 密钥。我生成了它并将其发送给我的同事。接下来,我在操作系统级别运行此脚本:
#!/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: Login failed: Password required
mget: *.csv: Login failed: Password required
ls: ls -l: Login failed: Password required
External program terminated with exit code 1
为什么远程服务器要求输入密码?如何避免这种情况?
版本:LFTP | 版本 4.9.2 Linux 版本 5.14.21-150400.24.33-default (geeko@buildhost) (gcc (SUSE Linux) 7.5.0、GNU ld (GNU Binutils;SUSE Linux Enterpris
我尝试过
lftp -u $USER:bla-bla-bla-password
命令,它可以工作,但是它会在服务器端阻止用户,尽管密钥认证是在用户设置中。
答案1
这是对我来说可行的解决方案:
SFTP_COMMAND="sftp -o Port=$PORT -o IdentityFile=$KEYFILE -o BatchMode=yes $USER@$HOST"
$SFTP_COMMAND <<EOF
cd $REMOTE_DIR
lcd $LOCAL_DIR
mget *.csv
bye
EOF