94 lines
2.6 KiB
Plaintext
94 lines
2.6 KiB
Plaintext
test
|
|
#include <libssh/libssh.h>
|
|
#include <stdio.h>
|
|
|
|
int main() {
|
|
// 定义目标服务器的信息
|
|
const char *hostname = "your_server_hostname";
|
|
const char *username = "your_username";
|
|
const char *password = "your_password";
|
|
|
|
// 初始化SSH会话
|
|
ssh_session session = ssh_new();
|
|
if (session == NULL) {
|
|
fprintf(stderr, "Error creating SSH session\n");
|
|
return 1;
|
|
}
|
|
|
|
// 设置SSH连接参数
|
|
ssh_options_set(session, SSH_OPTIONS_HOST, hostname);
|
|
ssh_options_set(session, SSH_OPTIONS_USER, username);
|
|
|
|
// 连接到SSH服务器
|
|
int rc = ssh_connect(session);
|
|
if (rc != SSH_OK) {
|
|
fprintf(stderr, "Error connecting to SSH server: %s\n", ssh_get_error(session));
|
|
ssh_free(session);
|
|
return 1;
|
|
}
|
|
|
|
// 使用密码进行身份验证
|
|
rc = ssh_userauth_password(session, NULL, password);
|
|
if (rc != SSH_AUTH_SUCCESS) {
|
|
fprintf(stderr, "Error authenticating with password: %s\n", ssh_get_error(session));
|
|
ssh_disconnect(session);
|
|
ssh_free(session);
|
|
return 1;
|
|
}
|
|
|
|
// 打开通道
|
|
ssh_channel channel = ssh_channel_new(session);
|
|
if (channel == NULL) {
|
|
fprintf(stderr, "Error creating channel: %s\n", ssh_get_error(session));
|
|
ssh_disconnect(session);
|
|
ssh_free(session);
|
|
return 1;
|
|
}
|
|
|
|
// 打开会话
|
|
rc = ssh_channel_open_session(channel);
|
|
if (rc != SSH_OK) {
|
|
fprintf(stderr, "Error opening channel session: %s\n", ssh_get_error(session));
|
|
ssh_channel_free(channel);
|
|
ssh_disconnect(session);
|
|
ssh_free(session);
|
|
return 1;
|
|
}
|
|
|
|
// 执行交互性命令
|
|
rc = ssh_channel_request_pty(channel);
|
|
if (rc != SSH_OK) {
|
|
fprintf(stderr, "Error requesting pty: %s\n", ssh_get_error(session));
|
|
ssh_channel_free(channel);
|
|
ssh_disconnect(session);
|
|
ssh_free(session);
|
|
return 1;
|
|
}
|
|
|
|
// 打开 shell
|
|
rc = ssh_channel_shell(channel);
|
|
if (rc != SSH_OK) {
|
|
fprintf(stderr, "Error opening shell: %s\n", ssh_get_error(session));
|
|
ssh_channel_free(channel);
|
|
ssh_disconnect(session);
|
|
ssh_free(session);
|
|
return 1;
|
|
}
|
|
|
|
// 从键盘获取输入并发送到 SSH 服务器
|
|
char buffer[256];
|
|
while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
|
|
ssh_channel_write(channel, buffer, strlen(buffer));
|
|
}
|
|
|
|
// 关闭 shell 通道
|
|
ssh_channel_send_eof(channel);
|
|
ssh_channel_close(channel);
|
|
|
|
// 释放资源
|
|
ssh_channel_free(channel);
|
|
ssh_disconnect(session);
|
|
ssh_free(session);
|
|
|
|
return 0;
|
|
} |