Controlling a child's stdin/stdout (not working with scp)
All,
Ok...so I know I *should* be able to control a process's stdin and stdout from the parent by creating pipes and then dup'ing them in the child. And, this works with all "normal" programs that I've tried. Unfortunately, I want to intercept the stdin/out of the scp application and it seems scp is actively refusing to allow me to. The code is:
I know the code works if I use something other than scp, I can write and read to the pipes all day long and control the process as desired. But, it seems that scp is specifically figuring out what the controlling terminal of the process is and actively refusing to co-operate with my pipes.
I then thought maybe I could try to "disown" the terminal by calling "setsid()" right before invoking scp (and tried it right after the fork). Well, that "works," but then the stupid thing connects to my X server and pops up a box to ask for the password. Of course, preventing scp from asking me anything is the exact reason I want to control the standard in of the process so I can funnel the password in through there.
So...does any one have another idea how I can redirect stdin/stdout for this most difficult process? It seems I'll actually need to "hook into" the terminal directly since scp is "so smart." Indeed, I believe scp may be openning up its own connection to the terminal to get input and send output....
Thanks....
P.S. I know there is a better way to do this, like creating the ssh keys so scp never asks for passwords to begin with. Unfortunately, the environment where I'm trying to use this disallows this. They want us to enter passwords every time and this "stupid" rule is circumventing my ability to automate tasks through scp; of course ftp is also taboo. So...I want this "scp wrapper" to read my local password file and just pass it through so I can get back to my regularly scheduled automation. Otherwise, I'll have to enter the passwords again and again while the scripts run...and that's just...well...pointless.
Yes, it does, and no, it won't let you, and that's for a reason -- stored passwords are not only inherently dangerous but completely unnecessary. Use shared keys, that's what they're there for. There's instructions for them plastered all over the internet and you can use them in ways that obey the spirit and letter of that rule -- give the shared key a password and use ssh-agent. That way you need to type the password once, to get the key, after which you can use the key to login automatically until your ssh-agent session finishes.
scp, sftp, and ssh are specifically engineered to stop what you are trying to do.
Corona is being kind. If you do not want to create ssh keys, then use ftp or commands like rcp. Don't make something insecure out of something that works hard to be secure.
Corona: There are 50+ hosts that this script needs to transfer files to/from. Each host has a different user/password. That user is the only one with access to the files I need to remote copy (besides root, of course). Can shared keys help here? The way I understand it, shared keys allow one user access to several hosts. They are tied to the user id. That won't help if this is true.
Jim: ftp/rcp are blocked, they aren't secure. Of course, neither is a password dictionary; but if you knew our password policy (and read above about the number of accounts all with disparite passwords), you'd realize everyone keeps them anyway. So...our security policy is so secure that it's insecure, lol. I'd just be making life easier if I could make this work.
You generate one key only - on the box you intend to do all the connections from.
Place the public key on all 50 remote boxes. Voila! ssh anyboxinthelist or sftp anyboxinthelist works magically. No passwords required.
You generate one key only - on the box you intend to do all the connections from.
Place the public key on all 50 remote boxes. Voila! ssh anyboxinthelist or sftp anyboxinthelist works magically. No passwords required.
Oh & when you are generating the key DO NOT enter any passphrase, just press return.
I got that, but I still don't see anything that says this works for multiple accounts. So, if I'm logged in to box1 as "dreamwarrior" and do the ssh-keygen, then I put the key file on box2 and try to do: "ssh user1@box2" it won't see "dreamwarrior's" key. Or am I misunderstanding something here? Can I put the "dreamwarrior" key on box2 in a location that allows ssh for ANY user? I would love it if "ssh box2" as dreamwarrior would work, but the fact is the "dreamwarrior" account on box2 won't have access to the "user1" files I need, so the scp will fail for permissions.
You put your dreasmwarrior key into the directory (.ssh) for the user you want to be. e.g., whoever.
then
You are now whoever, not dreamwarrior, on the remote box. So all you have to keep straight is what username goes with what remote box.
Well.. let's say i need to write a pretty simple script.
In my script i have 2 variables which can have value of 0 or 1.
$VERBOSE
$LOG
I need to implement these cases:
($VERBOSE = 0 && $LOG = 0) => ONLY ERROR output (STDERR to console && STDOUT to /dev/null)
($VERBOSE = 1... (5 Replies)
I am trying to implement the below using Ksh script on a Lx machine.
There is a file(input_file) with 100K records. For each of these records, certain script(process_rec) needs to be called with the record as input. Sequential processing is time-consuming and parallel processing would eat up... (2 Replies)
Hi,
i am using the below program to read from the standard input or to write to standard out put.
i know that using highlevel functions this can be done better than what i have done here.
i just want to know is there any other method by which i find the exact number of characters ( this... (3 Replies)
Hi,
I am working on a project where I have to generate and execute nasm code on-the-fly. I generate the code in a file program.asm and then execute it.This output is to stdout which i redirect to an output file which i read back to compare results:
system("nasm -f elf program.asm >... (5 Replies)
Hi,
i know how to
a) redirect stdout and stderr to one file,
b) and write to two files concurrently with same output using tee command
Now, i want to do both the above together.
I have a script and it should write both stdout and stderr in one file and also write the same content to... (8 Replies)
Hi all
I've run into a snag in a program of mine where part of what I entered in at the start of run-time, instead of the current value within printf() is being printed out.
After failing with fflush() and setbuf(), I tried the following approach
void BufferFlusher()
{
int in=0;... (9 Replies)
Hi,
Program A: uses pipe()
I am able to read the stdout of PROGAM B (stdout got through system() command) into PROGRAM A using:
* child
-> dup2(fd, STDOUT_FILENO);
-> execl("/path/PROGRAM B", "PROGRAM B", NULL);
* parent
-> char line;
-> read(fd, line, 100);
Question:... (2 Replies)
Hello all, I am trying to create n child processes and control them from a parent process; say make child 3 print its pid and then child 5 do the same and some other stuff. Is there a way to accomplishing this after all the child processes are created via a call to fork().
Thank you,
FG (23 Replies)