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);
ucloud:全球大促活动降价了!这次云服务器全网最低价,也算是让利用户了,UCloud商家调低了之前的促销活动价格,并且新增了1核1G内存配置快杰型云服务器,价格是47元/年(也可选2元首月),这是全网同配置最便宜的云服务器了!UCloud全球大促活动促销机型有快杰型云服务器和通用型云服务器,促销机房国内海外都有,覆盖全球20个城市,具体有北京、上海、广州、香港、 台北、日本东京、越南胡志明市、...
今天早上相比很多网友和一样收到来自Linode的庆祝18周年的邮件信息。和往年一样,他们会回顾在过去一年中的成绩,以及在未来准备改进的地方。虽然目前Linode商家没有提供以前JP1优化线路的机房,但是人家一直跟随自己的脚步在走,确实在云服务器市场上有自己的立足之地。我们看看过去一年中Linode的成就:第一、承诺投入 100,000 美元来帮助具有社会意识的非营利组织,促进有价值的革新。第二、发...
racknerd怎么样?racknerd今天发布了几款美国特价独立服务器的促销,本次商家主推高配置的服务器,各个配置给的都比较高,有Intel和AMD两种,硬盘也有NVMe和SSD等多咱组合可以选择,机房目前有夏洛特、洛杉矶、犹他州可以选择,性价比很高,有需要独服的朋友可以看看。点击进入:racknerd官方网站RackNerd暑假独服促销:CPU:双E5-2680v3 (24核心,48线程)内存...