首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试在SFTP中实现双重认证

尝试在SFTP中实现双重认证
EN

Stack Overflow用户
提问于 2019-04-22 01:37:25
回答 1查看 339关注 0票数 1

根据我的客户的要求,我正在尝试在SFTP文件传输中实现双重身份验证(密码、密钥),并且首选身份验证必须按密码、公钥、键盘交互的顺序进行。

我试图通过两种方式来实现这一点:

1)使用NET::SFTP::Foreign,但此模块默认的首选身份验证为公钥、密码,并且不允许我使用密码、公钥覆盖相同的身份验证,即使我在命令中明确提到也是如此。

代码语言:javascript
运行
复制
$sftp=Net::SFTP::Foreign->new("xyz.com",
                              user=> pqr,                            
                              password=>1234,
                              port=>2222,                                 
                              key_path=>/home/ddd/.ssh/id_rsa,
                              more=>[-vo=>'StrictHostKeyChecking=no',
                                     -o=>"ProxyCommand=/usr/bin/ssh " .
                                         "-o UserKnownHostsFile=/dev/null ".
                                         "-o StrictHostKeyChecking=no ".
                                         "-oPreferredAuthentications=password,publickey,keyboard-interactive " .
                                         "-oNumberOfPasswordPrompts=1 " .
                                         "-i /home/nnn/.ssh/flsftp " .
                                         "-l flsftp proxyserver.com " .
                                         "nc xyz.com 2222"]);

2)使用SFTP命令我可以使用SFTP命令手动建立连接,并在系统提示时输入密码,但要通过Perl自动执行此操作,我无法找到在命令行中传递密码的方法。我开始了解一些方法,如sshpass或expect,但由于安全原因,我不能使用这两种方法。

代码语言:javascript
运行
复制
sftp -o UserKnownHostsFile=/dev/null \
     -o StrictHostKeyChecking=no \
     -i /home/ddd/.ssh/id_rsa \
     -o PreferredAuthentications=password,publickey,keyboard-interactive \
     -o NumberOfPasswordPrompts=1 \
     -o 'ProxyCommand=/usr/bin/ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /home/nnn/.ssh/flsftp -l flsftp proxyserver.com nc xyz.com 2222' \
     pqr@xyz.com
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-23 15:45:13

Net::SFTP::Foreign尝试检测您自己设置PreferredAuthentications的情况,以便让它原封不动地通过。只是检测代码不是很复杂,有时会失败。尝试如下所示:

代码语言:javascript
运行
复制
$sftp=Net::SFTP::Foreign->new("xyz.com",
                              user => "pqr",                            
                              password => "1234",
                              port => 2222,                                 
                              key_path => "/home/ddd/.ssh/id_rsa",
                              more => ['-v',
                                       -o => 'StrictHostKeyChecking=no',
                                       -o => 'UserKnownHostsFile=/dev/null',
                                       -o => 'PreferredAuthentications=password,publickey,keyboard-interactive']);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55785130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档