yasuです。
scpの自動化コマンドをC言語にて作成したいのですが、
うまくいきません。
自動化に成功した方がいらっしゃれば、組み方を教えてください。
【現状】
1)擬似端末を使用しcp -i rm -i等のコマンドは自動化○
2)同一のコマンドにてscpを実行すると自動化×
※記事端末を作成後、子プロセスにてscpを実行しているがなぜかscpの入出力が
コマンドをたたいた端末につながっている。
【ソース】
#define ANS_PASSWD "XXX"
#define ANS_YES "yes\n"
#define Q_RM "rm: remove"
#define Q_SCP "XXX@XXX's password:"
int main () {
char *slaveTermName = NULL;
char buf[BUFSIZ + 1];
char envSet[BUFSIZ];
int masterDp, slaveDp,pid,n;
// if(!fork()){
masterDp = open( "/dev/ptmx" ,O_RDWR );
grantpt(masterDp);
unlockpt(masterDp);
slaveTermName = (char *)ptsname(masterDp);
sprintf(envSet,"SSH_TTY=%s",slaveTermName);
setsid();
putenv(envSet);
pid = fork();
if (!pid) {
slaveDp = open(slaveTermName, O_RDWR, 0);
ioctl(slaveDp, I_PUSH, "ptem");
ioctl(slaveDp, I_PUSH, "ldterm");
close(masterDp);
dup2(slaveDp, 0); dup2(slaveDp, 1); dup2(slaveDp, 2);
system("scp -p AAA XXX@XXX:BBB");
//system("rm -i AAA");
close(slaveDp);
exit(0);
}
n = read(masterDp,buf,sizeof(buf) -1 );
//if (strncmp(buf, Q_RM,strlen(Q_RM)) == 0){
//if (strncmp(buf, Q_SCP,strlen(Q_SCP)) == 0){
fprintf(stdout,"ANSWER = %s \n",ANS_PASSWD);
//write(masterDp,ANS_YES,sizeof(ANS_YES));
write(masterDp, ANS_PASSWD, sizeof(ANS_PASSWD));
//}
wait(0);
exit(0);
//}
exit(0);
}/* end main */