免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12270 | 回复: 5
打印 上一主题 下一主题

[C] 如何在C语言程序中使用SSH。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-28 19:16 |只看该作者 |倒序浏览
现在的场景是,有A和B两台Ubuntu。

已知A机器的某个用户名和密码,并且开启了SSH服务。
现在需要在B机器上自己编写一个程序,登录到A机器上进行操作(假如在/root/下建立一个test文件夹)。

假如程序是
int main()
{
     system("ssh user@host");
     我想一直保持这个ssh连接,在以后就直接调用system(mkdir -p /root/test);
     不知道这样行不行。

    还是说每次都需要
    system("ssh user@host 'mkdir -p /root/test' ");因为这样每次登录都会耗时。
}

论坛徽章:
0
2 [报告]
发表于 2011-09-28 19:18 |只看该作者
要用管道;如果登录需要输入密码,则还要用expact库

论坛徽章:
0
3 [报告]
发表于 2011-09-28 19:24 |只看该作者
要用管道;如果登录需要输入密码,则还要用expact库
狗蛋 发表于 2011-09-28 19:18



    能否详细讲讲?初学,不太明白。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2011-09-28 20:54 |只看该作者
本帖最后由 MMMIX 于 2011-09-29 19:54 编辑

回复 1# buptzwp


    你可以使用 publickey 方式認證,而不是用密碼;也可以使用 libssh2 提供的接口。至於 expect,這個腳本用比較方便,C 用就不一定了。

论坛徽章:
0
5 [报告]
发表于 2011-09-29 10:32 |只看该作者
1、这种功能用脚本实现最好
2、最好弄成dsa公钥验证方式,也就是ssh无密码登录
3、ssh的密码输入是绑定到TTY而不是stdin的,所以无法重定向(到管道)
    3.1、如果想通过程序输入ssh密码,那么就要模拟TTY,或者让ssh认为你的输入是直接来自TTY
    3.2、或者,你干脆自己实现个最简单的ssh协议吧
    3.3、程序模拟TTY,一般会直接采用expact库,这在脚本里面很方便,但由于C处理字符串过于笨拙……
4、登录之后,和ssh交互需要通过管道进行。用写来模拟控制台键入字符,用读来取命令输出数据;至于命令返回值……读 echo $? 的输出吧
5、如果命令本身也有输入/输出提示,比如 rm xxx 会让你按y什么的,那么你必须自己捕捉到这个提示,然后往管道写一个"Y\n"进去。所以……也许还是expect方便。
6、你可以搞一个脚本,在脚本里用expect完成登录动作,然后下interact命令进入交互模式;然后在C里面用popen()执行这个脚本,这样就可以避开登录问题,但仍然要处理命令行交互问题(也就是回答are you sure之类的问题,当然这可以通过为命令传入-y之类参数来绕开,不过有些命令未必支持)。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
6 [报告]
发表于 2011-09-29 17:39 |只看该作者
回复 1# buptzwp


可以使用libssh2这个库!项目中用过,还不错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP