文件传输libssh2 进行 sftp 文件传输

sftp  时间:2021-01-25  阅读:()

libs sh2进行SFTP文件传输

*The sample code has default values for host name,user name,password

*and path to copy,but you can specify them on the command line like:

*sftp 192.168.0.1 user password/tmp/secrets -p|-i|-k

#include libssh2_config.h

#include libssh2.h

#include libssh2_sftp.h

#ifdef HAVE_WINSOCK2_H

#include winsock2.h

#endif

#ifdef HAVE_S YS_SOCKET_H

#include sys/socket.h

#endif

#ifdef HAVE_NETINET_IN_H

#include netinet/in.h

#endif

#ifdef HAVE_UNISTD_H

#inc lude un istd.h

#endif

#ifdef HAVE_ARPA_INET_H

#include arpa/inet.h

#endif

#ifdef HAVE_S YS_TIME_H

#include sys/time.h

#endif

#include sys/types.h

#inc lude fcntl.h

#inc lude errno.h

#include stdio.h

#inc lude ctype.hstatic void kbd_callback(const char*name, int name_len,c onst char*instruction, int instruction_len, int num_prompts,const LIBS S H2_USERAUTH_KBDINT_PROMPT*prompts,LIBS S H2_USERAUT H_KBDINT_RESPONSE*responses,void**abstract)int i;size_t n;char buf[1024];

(void)abstract;printf(Performing keyboard-interactive authentic ation.\nprintf(Authentic ation name: ‘fwrite(name, 1,name_len, stdout);printf( ‘\nprintf(Authentic ation instruction: ‘

fwrite(instruc tion, 1, instruction_len, stdout);printf( ‘\nprintf(Number of prompts:%d\n\n,num_prompts);for(i=0; i num_prompts; i++) {printf(Prompt%d from server: ‘ , i);fwrite(prompts[i].text, 1,prompts[i].length, s tdout);printf( ‘\nprintf(Please type response:fgets(buf, sizeof(buf), stdin);n=strlen(buf);while(n 0 strchr( \r\n,buf[n- 1]))n--;buf[n]=0;responses[i].text=strdup(buf);respons es[i].length=n;printf(Response%d from user is ‘ , i);fwrite(respons es[i].text, 1,respons es[i].length, stdout);printf( ‘\n\nprintf(Done.Sending keyboard-interactive responses to server now.\n

*The application code is responsible for creating the socket

*and establishing the connections oc k=s oc ket(AF_INET,S OCK_S TREAM,0);

sin.sin_family=AF_INET;sin.sin_port=htons(22);s in.s in_addr.s_addr=hostaddr;if(c onnec t(s oc k, (struc t s ockaddr*)( s in),sizeof(struct sockaddr_in)) !=0) {fprintf(stderr,failed to c onnect!\nr eturn-1;

/*Create a session instancesession=libssh2_session_init();if(!session)r eturn-1;

/*Since we have set non-blocking, tell libssh2 we are blocking*/libssh2_session_set_blocking(session, 1);

/*. .. start it up.This will trade welcome banners,exchange keys,

*and setup crypto,compression,and MAC layersrc=libssh2_session_handshake(session, sock);if(rc) {fprintf(stderr,Failure establishing SSH session:%d\n, rc);r eturn-1;

/*At this point we havn’t yet authentic ated.The first thing to do

* is check the hostkey’s fingerprint against our known hosts Your app

*may have it hard coded,may go to a file,may present it to the

*us er, that’s your c allfingerprint=libs sh2_hostkey_hash(s ession,LIBS S H2_HOSTKEY_HAS H_S HA1);fprintf(stderr,Fingerprint:for(i=0; i i++) {fprintf(stderr,%02X, (uns igned char)fingerprint[i]);fprintf(s tderr, \n

/*check what authentication methods are available*/us erauthlist=libs sh2_us erauth_list(s ess ion,us ername, strlen(us ername));printf(Authentic ation methods:%s\n,us erauthlis t);if(str str(us erauthlis t,p ass w ord) !=NULL) {auth_p w|=1;if(str str(us erauthlis t,keyb o ard-interac tive) !=NULL) {auth_p w|=2;if(str str(us erauthlis t,pub lic key) !=NUL L) {auth_p w|=4;

/* if we got an 4. argument we set this option if supported*/if(argc 5) {if((auth_pw 1) !strcasecmp(argv[5], -p)) {auth_p w=1;if((auth_pw 2) !strcasecmp(argv[5], -i )) {auth_p w=2;

if((auth_pw 4) !strc as ecmp(argv[5], -k)) {auth_p w=4;if(auth_pw 1) {

/*We c ould authentic ate via pas sword*/if(libssh2_userauth_password(session,username,password)) {fprintf(stderr,Authentic ation by pas sword failed.\ngoto shutdown;

} else if(auth_pw 2) {

/*Or via keyboard-interactive*/if(libs sh2_us erauth_keyboard_interactive(s es s ion,us ername,kbd_c allback) ) {printf( \tAuthentic ation by keyboard-interactive failed!\ngoto shutdown;

} els e {printf( \tAuthentic ation by keyboard-interactive succ eeded.\n

} else if(auth_pw 4) {

/*Or by public key*/if(libs sh2_userauth_publickey_fromfile(ses sion,username,keyfile 1,keyfile2,pas sword)) {printf( \tAuthentic ation by public key failed!\ngoto shutdown;

} els e {printf( \tAuthentication by public key succ eeded.\n

} els e {

printf(No supported authentic ation methods found!\ngoto shutdown;fprintf(stderr, libs sh2_s ftp_init()!\nsftp_session=libssh2_sftp_init(session);fprintf(stderr,Unable to open file with SFTP:%ld\n,libs sh2_s ftp_last_error(s ftp_s ess ion));goto shutdown;fprintf(stderr, libs sh2_sftp_open() is done,now rec eive data!\ndo {char mem[1024];

/* loop until we fail*/fprintf(stderr, libs sh2_s ftp_read()!\nrc=libs sh2_sftp_read(sftp_handle,mem,sizeof(mem));if(rc0) {write(1,m em, rc);

} els e {break;

}while(1);lib s s h2_s ftp_c lo s e(s ftp_handle);libs sh2_s ftp_shutdown(sftp_s es s ion);

艾云年付125元圣何塞GTT,洛杉矶vps年付85元

艾云怎么样?艾云是一家去年年底成立的国人主机商家,商家主要销售基于KVM虚拟架构的VPS服务,机房目前有美国洛杉矶、圣何塞和英国伦敦,目前商家推出了一些年付特价套餐,性价比非常高,洛杉矶套餐低至85元每年,给500M带宽,可解奈飞,另外圣何塞也有特价机器;1核/1G/20G SSD/3T/2.5Gbps,有需要的朋友以入手。点击进入:艾云官方网站艾云vps促销套餐:KVM虚拟架构,自带20G的防御...

RAKsmart便宜美国/日本/中国香港VPS主机 低至月$1.99 可安装Windows

RAKsmart 商家这几年还是在做事情的,虽然他们家顺带做的VPS主机并不是主营业务,毕竟当下的基础云服务器竞争过于激烈,他们家主营业务的独立服务器。包括在去年开始有新增多个数据中心独立服务器,包括有10G带宽的不限流量的独立服务器。当然,如果有需要便宜VPS主机的他们家也是有的,比如有最低月付1.99美元的美国VPS主机,而且可选安装Windows系统。这里商家有提供下面六款六月份的活动便宜V...

IMIDC日本多IP服务器$88/月起,E3-123x/16GB/512G SSD/30M带宽

IMIDC是一家香港本土运营商,商家名为彩虹数据(Rainbow Cloud),全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。目前主机商针对日本独立服务器做促销活动,而且提供/28 IPv4,国内直连带宽优惠后每月仅88美元起。JP Multiple IP Customize...

sftp为你推荐
ddr2内存价格DDR2内存条2G的价格是多少?月付百万的女人们男人们谈谈,和多大年龄的女人做爱最舒服小说软件哪个好用免费现在看小说用什么软件好?朗逸和速腾哪个好大众朗逸和速腾哪个更好一点?车险哪个好车险平安和人保哪个好?都有什么优点和缺点?考生个人空间登录第一次登陆湖南省高等教育自学考试 考生个人空间就密码不对为什么铁通dns服务器地址求陕西的中国移动铁通DNS服务器地址!!!360云盘登录360云盘登陆账号360云盘关闭360云盘已经关闭了 文件怎么下360云盘36t请问360云盘容量为什么最低有36T,其他IT行业的云盘都最多就2T?
域名买卖 网页空间租用 vps安全设置 stablehost 国外php空间 英文站群 台湾谷歌网址 徐正曦 空间合租 cdn加速是什么 华为k3 cdn加速 一句话木马 硬防 性能测试工具 linuxvi命令 主机声音大 免费免备案cdn sockscap怎么用 总线制报警主机 更多