wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Windows上的OpenSSH服务器即使在非交互模式下也拒绝在没有STDIN的情况下工作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述@H_618_4@ (与 this question有关) 在Windows上使用sshd服务器(Win32-OpenSSH)时(使用基于密钥的auth进行自动化),除非它具有STDIN(或PTY),否则它不起作用.例如,运行此(从Debian jessie openssh客户端)运行正常(返回Windows用户名): ssh -4 -T -o Batchmode=yes winserver whoami 但是,这两
(与 this question有关)

在Windows上使用sshd服务器(Win32-OpenSSH)时(使用基于密钥的auth进行自动化),除非它具有STDIN(或PTY),否则它不起作用.例如,运行此(从Debian jessie openssh客户端)运行正常(返回Windows用户名):

ssh -4 -T -o Batchmode=yes winserver whoami

但是,这两个不会(它们只是在没有执行命令而没有返回任何输出的情况下终止):

ssh -4 -T -o Batchmode=yes winserver whoami < /dev/null
ssh -4 -n -T -o Batchmode=yes winserver whoami

这会产生问题,因为无法从没有打开STDIN的程序(如cron(8)或atd(8))运行非交互式ssh命令.

当使用Debian openssh服务器时,它当然可以正常工作.问题只发生在Windows ssh服务器上(Fails with Win32-OpenSSHFreeSSHD. Bitvise SSHD但似乎工作正常,但我们正在寻找免费的Windows ssh服务器解决方案;开源,简单和维护是奖金)

这是reported,但在此期间有人有解决方案或解决方法吗?

最后,我编写了这个ssh包装器来处理有缺陷的Windows OpenSSH服务器,即使对于不使用它的非交互式命令也需要STDIN:
#!/usr/bin/perl

use Strict;
use warnings;
use Net::OpenSSH;

my $HOSTNAME = shift;
my $ssh = Net::OpenSSH->new($HOSTName);

my ($in_pipe,undef,$pid) =
    $ssh->open_ex( { stdin_pipe => 1 },@ARGV) or die "open_ex Failed: " . $ssh->error;

waitpid($pid,0);

只使用带有参数的主机名和命令来运行,不允许其他参数(我在〜/ .ssh / config中设置它们),所以你运行脚本(例如)作为myssh winserver whoami<的/ dev / null的.它只是ssh客户端的一个包装器,它提供了假的STDIN,因此允许从cron(8)和atd(8)运行非交互式ssh会话

大佬总结

以上是大佬教程为你收集整理的Windows上的OpenSSH服务器即使在非交互模式下也拒绝在没有STDIN的情况下工作全部内容,希望文章能够帮你解决Windows上的OpenSSH服务器即使在非交互模式下也拒绝在没有STDIN的情况下工作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。