【发布时间】:2020-09-05 05:33:25
【问题描述】:
我正在尝试使用我编写的一个简单的 C++ 程序连接到我学校的 ssh 服务器。我的 windows 电脑安装了 OpenSSH 客户端,我可以使用命令提示符建立连接。
这是通过命令提示符工作的方式:
C:\Users\Username>ssh username@example.server.name
Password:
Last login: Sat Sep 5 15:20:44 2020 from 117.194.240.211
username@example:~$
我希望用我写的一个简单的 C++ 程序来复制这个动作。这是代码。
#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
int main()
{
string hostIP;
string username;
string password;
cout << "Welcome to SSH Program" << endl;
cout << "----------------------" << endl;
cout << "\nEnter host ip or name: ";
cin >> hostIP;
cout << "Enter username: ";
cin >> username;
cout << "\nConnecting...\n" << endl;
string composite = "ssh " + username + "@" + hostIP;
char command[100];
strcpy_s(command, composite.c_str());
system(command);
system("pause");
}
不幸的是,当我尝试运行此程序时,我得到以下输出:
Welcome to SSH Program
----------------------
Enter host ip or name: example.server.name
Enter username: username
Connecting...
'ssh' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .
据我了解,只有在我的系统上未安装 OpenSSH 客户端时才会出现此消息。但正如命令提示符示例所证明的那样。
为什么会发生这种情况,有办法解决吗?
【问题讨论】:
-
您的
PATH变量是否包含指向您计算机上存储ssh的路径?您可以从控制台手动运行它吗?您也许可以使用安装ssh的完整路径来修复它。 -
唯一的解释是您运行程序的环境与运行命令提示符的环境不同。具体来说,PATH 变量必须不同。
-
您可以从命令提示符获取 PATH 变量,只需键入
PATH。您可以使用#include <cstdlib>和cout << getenv("PATH") << '\n';从程序中获取 PATH 变量 -
@MauriceKasomwung IIRC 项目/属性/调试/环境。我认为即使在没有调试的情况下启动程序也是如此。
-
在命令 propt 中键入“路径”将永远不会输出您声称的内容,除非安装了小型 cmdlet。您应该可以使用
system("C:\\WINDOWS\\System32\\OpenSSH\\ssh.exe"),但应该可以按上述方式工作。