C程序调用system启动rsync,密码不知道怎么输入。

Jackindata
博客专家认证
2012-08-29 02:54:27

在Linux系统中,当前目录下有一个静态编译好的rsync,执行./rsync然后输入密码是能够正常运行的。现在我在C程序中调用system("./rsync -vzr dir1 192.168.1.11:/root/dir2"); shell终端提示我要输入密码,但是我不知道该怎么样在C程序里把密码输入。


...全文
336 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jackindata 2012-08-31
  • 打赏
  • 举报
回复

我也看到过有用expect来实现密码输入的。但是开发板的剪裁过的Linux系统也不支持这个expect 。
Jackindata 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

system("echo password|./rsync -vzr dir1 192.168.1.11:/root/dir2")
或者rsync可以配置成不用密码的


rsync是通过ssh来建立连接的。如果我直接在shell终端下执行 echo 123 | ssh 192.168.1.11 来建立ssh连接,会有如下出错提示:Pseudo-ter……
[/Quote]


ssh 加入-tt 选项就没有那个错误了。执行 echo 123 | ssh -tt 192.168.1.11 还是会提示输入密码,输入密码123后,链接到ssh成功,而且123被当作命令来执行了。而且,用键盘输入其他命令如ls都执行不了。只能Ctrl+c退出ssh返回到本机终端。

Jackindata 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

设置ssh 不需要密码
1、客户端产生公钥,执型下面命令,按两次【Enter】,产生公钥id_rsa.pub
ssh-keygen -f id_rsa -t rsa
2、上传公钥文件到服务器
scp id_rsa.pub root@xxx.xxx.xxx.xxx:/root/.ssh/authorized_keys
3、保存私钥
cp id_rsa ~.ssh

如果成功,则ss……
[/Quote]


这个方法我试过,但由于我的客户端rsync运行在开发板上,没有ssh-keygen工具。
root_jli 2012-08-31
  • 打赏
  • 举报
回复
设置ssh 不需要密码
1、客户端产生公钥,执型下面命令,按两次【Enter】,产生公钥id_rsa.pub
ssh-keygen -f id_rsa -t rsa
2、上传公钥文件到服务器
scp id_rsa.pub root@xxx.xxx.xxx.xxx:/root/.ssh/authorized_keys
3、保存私钥
cp id_rsa ~.ssh

如果成功,则ssh到服务器不询问密码
Jackindata 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

system("echo password|./rsync -vzr dir1 192.168.1.11:/root/dir2")
或者rsync可以配置成不用密码的
[/Quote]

rsync是通过ssh来建立连接的。如果我直接在shell终端下执行 echo 123 | ssh 192.168.1.11 来建立ssh连接,会有如下出错提示:Pseudo-terminal will not be allocated because stdin is not a terminal 。而先执行 ssh 192.168.1.11 再按提示输入密码是可以正常ssh的。
lylm 2012-08-30
  • 打赏
  • 举报
回复
system("echo password|./rsync -vzr dir1 192.168.1.11:/root/dir2")
或者rsync可以配置成不用密码的
jianzhibeihang 2012-08-30
  • 打赏
  • 举报
回复
这个问题有点意思
貌似没啥办法啊
Linux-Torvalds 2012-08-29
  • 打赏
  • 举报
回复
估计这样子很难做到。
Rsync命令详解 在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项。 一、rsync的六种工作模式: 1.1、拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。 1.2、使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。 1.3、使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。 1.4、从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。 1.5、从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。 1.6、列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。 二、rsync的命令格式可以为: rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... SRC [SRC]... DEST rsync [OPTION]... [USER@]HOST::SRC [DEST] rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] 2.1、用法 2.1.1在使用rsync传输文件时,需要指定一个源和一个目的,其中一个可能是远程机器的资源信息。例如: #rsync *.c servivcer:src/ 表示将传输当前目录下所有以.c结尾的文件到机器servivcer的src目录下。如果文件已经存在于远程机器,则会调用远程更新协议来实现仅仅传输那些更新过的文件。 rsync -avz servivcer:src/bar /data/tmp 该命令则递归地传输机器servivcer上的src/bar目录下的所有内容到本地/data/tmp/bar目录中。文件以归档模式进行传输,以确保符号链结、属性、权限、属主等信息在传输中都被保存。此外,可以使用压缩技术来加快数据传输: rsync -avz servivcer:src/bar/ /data/tmp 路径信息以"/"结尾时表示拷贝该目录,而不以"/"结尾表示拷贝该目录。当配合使用--delete选项时这两种情况的区别将会表现出来。 2.1.2也可以以本地模式来使用rsync,如果SRC和DST路径中都没有任何":"符号则表示该命令运行在本地模式,等同于cp命令。 rsync somehost.mydomain.com:: 这种模式则将会列出somehost.mydomain.com.可以访问的所有模块信息。 选项说明 -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD -r, --recursive 对子目录以递归模式处理 -R, --relative 使用相对路径信息 rsync servivcer/bar/servivcer.c remote:/tmp/ 则在/tmp目录下创建servivcer.c文件,而如果使用-R参数: rsync -R servivcer/bar/servivcer.c remote:/tmp/ 则会创建文件/tmp/servivcer/bar/servivcer.c,也就是会保持完全路径信息。 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。 --backup-dir 将备份文件(如~filename)存放在在目录下。 -suffix=SUFFIX 定义备份文件前缀 -u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) -l, --links 保留软链结 -L, --copy-links 想对待常规文件一样处理软链结 --copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结 --safe-lin

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧