- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Windows 上打包一个程序,希望能够从外部调用 OpenSSH。因此,我需要用它打包 ssh.exe,并且我需要强制始终使用自定义命令行参数调用 ssh.exe(特别是 -F 以指定它应该使用的配置文件)。没有办法强制调用程序执行此操作,并且在 Windows 中没有其他简单的方法可以执行此操作(无论如何我能想到 - 符号链接(symbolic link)或 cmd 脚本将不起作用)所以我只是想写一个C 中的简单包装器来做到这一点。
这是我整理的代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ret;
char **newv = malloc((argc + 2) * sizeof(*newv));
memmove(newv, argv, sizeof(*newv) * argc);
newv[argc] = "-F ssh.conf";
newv[argc+1] = 0;
ret = execv("ssh.orig.exe", newv);
printf("execv failed with return value of %i", ret);
return ret;
}
然后我在 Cygwin 中使用 GCC 4.6.3 编译这段代码,它运行没有错误;但是,在输入和输出方面存在一种奇怪的行为。当您去控制台输入时(确认主机的真实性并输入密码等),只有部分输入出现在控制台上。例如,如果我输入单词“yes”并按 enter,只有“e”会出现在控制台上,并且 SSH 会显示一条关于需要输入“yes”或“no”的错误.从 Windows 命令提示符执行此操作将导致您的输入返回到命令提示符,因此当您键入“yes”并按 enter 时,您会得到“yes”未被识别为内部命令或外部命令...”消息,就好像输入是在命令提示符下键入的一样。最终 SSH 将在此之后超时。
所以,我显然在这里遗漏了一些东西,我假设它与 execv 的工作方式有关(至少是它的 POSIX Cygwin 版本)。
我在这里遗漏了什么或者有其他选择吗?我想知道我是否需要 fork 它并将 I/O 重定向到 fork (尽管 fork() 似乎不起作用 - 但 Windows 上还有其他问题)。我尝试使用 process.h 中的 _execv,但我在获取正确的代码时遇到了问题(也可能与尝试使用 gcc 有关)。
也有可能有一种我没有想到的非编程方式来做到这一点,但我尝试过的所有可能性似乎都行不通。
想法?
最佳答案
我最终找到了解决这个问题的办法。我敢肯定还有其他方法可以做到这一点,但这似乎可以解决问题并且效果很好。我用以下代码替换了 execv 行:
ret = spawnv(P_WAIT, "ssh.orig.exe", newv);
您必须使用“P_WAIT”,否则父进程将完成并退出,您仍然会遇到与之前相同的问题。这导致父进程等待,但仍将输入和输出传输到子进程。
关于c - 围绕 OpenSSH 的简单 C 包装器(在 Windows 上使用 Cygwin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20925335/
我在 Windows 7 中使用 MSYS,现在我需要它来提供 ssh 服务器服务。 openssh 可以像在 cygwin 中一样安装在 msys 中吗? 我可以在/msys/bin 中找到 ssh
我已经使用以下手册在 Windows Server 2016 上安装了 OpenSSH: Installing SFTP (SSH FTP) Server on Windows with OpenSS
我在AIX上运行脚本时遇到以下错误 Reading configuration data /ecmsq1vg1/home1/aradmin/.ssh/config Reading configurat
如果未在ssh配置文件中显式配置KexAlgorithms,openssh可能使用的默认 key 交换算法是什么? 我正在使用的openssh版本是OpenSSH_6.4p1。 最佳答案 经过进一步检
我想在标题中分享我对问题的回答,但我无法很快找到。 有很多主题如何完全禁用密码身份验证: UsePam yes # it will not be used ChallengeResponseAuthe
我目前被指派去调查并以某种方式找到一种“定制”(对身份验证、常量、消息等进行修改)OpenSSH 的方法,并且作为一个“基于网络”的人,我真的不知道从哪儿开始。因此非常感谢评论。 问题: 我从 her
我有一个奇怪的问题。 我无法SSH到具有IP地址172.17.0.61的docker容器。 我收到以下错误: $ ssh 172.17.0.61 ssh: connect to host 172.17
我正在使用 NET::OpenSSH PERL 的模块。我在简单的脚本上进行了尝试,它运行良好。 现在我将它包含在一个更大的脚本中: switch ($ARGV[2]) { case "OBS" {
如果我像这样使用 OpenSSH,我会喜欢它: ssh user@host 它要求输入密码 Please enter Passphrase: 然后要求输入密码 Please enter Passwor
我尝试将 ssh 配置为使用两个 Remote ,每个 Remote 都有不同的 key 对。因此,我创建了这个 config . UserKnownHostsFile ~/.ssh/known_ho
我正在使用 OpenSSH version13在一个项目中。然而时不时nchan.c当我们尝试使用 ssh 连接到产品时返回错误,我们在产品中得到以下打印,然后连接关闭。 channel 0: rcv
一直在尝试跨几台服务器设置无缝 ssh 登录,但遇到问题,因为在复制公钥后,ssh 到主机仍然要求输入密码。这是我做的 [root@app6 .ssh]# ssh-keygen Generating
在函数中的openssh代码(openssh-5.9p1/auth2.c) input_userauth_request(int type, u_int32_t seq, void *ctxt) 我正
我想从源代码升级openssh-server。我有一个关于如何找出 OpenSSH 编译选项的问题。 我如何确定 OpenSSH 使用哪些选项编译? 最佳答案 我不知道它会存储在打包的二进制文件中的任
我想知道是否有一种方法可以帮助我不仅自动安装 cygwin,还可以帮助我使用 cygwin 建立 OpenSSH 服务器。 是否可以在一个脚本中完成? 最佳答案 静默安装 cygwin openssh
我基于 Ubuntu 16 构建 Docker,并希望允许 PuTTY 访问 Ubuntu。 我已将该行添加到 docker 文件中: #Download base image ubuntu 16.0
我使用 PuTTYgen 生成了 OpenSSH 私钥(并以 OpenSSH 格式导出)。 如何在现有 key 上设置密码(我知道如何生成带有密码的新 key )? 最佳答案 尝试以下命令: ssh-
我是 perl 的初学者,正在尝试编写一个使用 Net::OpenSSH 在给定主机上运行命令的脚本。我如何在 Net::OpenSSH 中进行交互模式验证,类似于我们在 Net:SSH::Perl
我需要从多台服务器运行备份到另一台服务器上的单个帐户。如果其中一台公共(public)服务器遭到破坏,我不希望备份帐户上另一台服务器的文件受到破坏。 我需要做的是根据传入连接的 ssh key ,仅允
我目前正在为服务器编写一个安装后脚本(主要是为了我自己,因为我知道我需要/想要什么),目标是 debian 8。 但是我在 make OpenSSH 时遇到了问题。 首先: 变量: OPENSSL_V
我是一名优秀的程序员,十分优秀!