解决在iOS开发的代码中实现scp的ssh远程连接,怎么输入密码问题
2014-09-05 10:24
661 查看
有时间一个头疼的问题,为什么网上的大侠们不能总结下呢。。。
具体问题如下:
我要在代码里面实现命令远程拷贝:scp “源目录文件” user@IP:/目的地址“
这个命令输入后会有一个提示是否连接:yes
密码:xxxxxx
所以这里会有两个交互,怎么办呢?
我找了个种资料,想用以下几个方法,但都只会一半,交互那里就不知道怎么办。
一、用exec
在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。
#include<unistd.h>
函数定义 int execve(const char *filename, char *const argv[ ], char *const envp[ ]);
返回值 函数执行成功时没有返回值,执行失败时的返回值为-1.
函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。
#include<unistd.h>
main()
{
char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};
char *envp[ ]={"PATH=/bin", NULL}
execve("/bin/ls", argv, envp);
}
解决不了交互。。。
二、用NSPipe
三、网上提出来的用expect脚本自动输入
用TCL的expect
需要安装TCL语言,是什么东东。。。
四、伪终端
有人说已经用这个解决了
“用的是打开一个伪终端,执行/bin/sh,再在里面执行scp,这样可以捕获到输入密码的提示,在输入密码就可以了”
具体问题如下:
我要在代码里面实现命令远程拷贝:scp “源目录文件” user@IP:/目的地址“
这个命令输入后会有一个提示是否连接:yes
密码:xxxxxx
所以这里会有两个交互,怎么办呢?
我找了个种资料,想用以下几个方法,但都只会一半,交互那里就不知道怎么办。
一、用exec
在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。
#include<unistd.h>
函数定义 int execve(const char *filename, char *const argv[ ], char *const envp[ ]);
返回值 函数执行成功时没有返回值,执行失败时的返回值为-1.
函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。
#include<unistd.h>
main()
{
char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};
char *envp[ ]={"PATH=/bin", NULL}
execve("/bin/ls", argv, envp);
}
解决不了交互。。。
二、用NSPipe
#include "NSTask.h" - (void) listTcpPorts { NSTask *task = [[NSTask alloc] init]; [task setLaunchPath: @"/usr/sbin/lsof"]; [task setArguments: [[NSArray alloc] initWithObjects: @"-i4tcp", nil]]; NSPipe *pipe= [NSPipe pipe]; [task setStandardOutput: pipe]; NSFileHandle *file = [pipe fileHandleForReading]; [task launch]; NSData *data = [file readDataToEndOfFile]; NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; NSLog(@"tcp ports: \n %@", output); }
三、网上提出来的用expect脚本自动输入
用TCL的expect
需要安装TCL语言,是什么东东。。。
四、伪终端
有人说已经用这个解决了
“用的是打开一个伪终端,执行/bin/sh,再在里面执行scp,这样可以捕获到输入密码的提示,在输入密码就可以了”
相关文章推荐
- ssh验证解决远程拷贝文件和文件同步需要输入密码的问题
- ssh、scp的使用,以及shell脚本解决scp需要输入密码的问题
- ssh连接长等待输入密码问题解决
- Linux_scp 远程复制多个文件时不需要重复多次输入密码怎么解决?复制命令都是写在bash内的
- 在两台服务器之间建立信任关系解决scp,ssh等不用输入密码等问题
- ios 开发中 developer tools access 总是要输入密码问题的解决
- 解决ssh连远程linux主机总是提示输入密码的问题
- Python 实现Linux间远程拷贝Scp不用输入密码问题
- 在两台服务器之间建立信任关系解决scp,ssh等不用输入密码等问题
- 在两台服务器之间建立信任关系解决scp,ssh等不用输入密码等问题
- ios 开发中 developer tools access 总是要输入密码问题的解决
- 在两台服务器之间建立信任关系解决scp,ssh等不用输入密码等问题
- 在两台服务器之间建立信任关系解决scp,ssh等不用输入密码等问题
- Ubuntu远程ssh时在输入scp命令后用tab键补全时警告解决办法
- IOS开发问题解决之限制UITextField输入特定位数小数时,Done按钮失效
- ubuntu下ssh连接远程机器等待很长时间提示输入密码
- 解决Vmware Workstation7上安装Linux系统不能SSH远程连接的问题
- eclipse连接远程hadoop集群开发时权限不足问题解决方案
- eclipse连接远程hadoop集群开发时0700问题解决方案
- eclipse连接远程hadoop集群开发时权限不足问题解决方案