1) scp run on client (copy remote to local case)

  • construct scp command to be executed on the server via ssh. append -v -r -p -d flags as appropriate. Resulting command stored in cmd variable
  • call toremote() if destination is remote; tolocal() if destination is local (handles 'remote to local' and 'local to local' cases)
  • for 'remote to local' case, append '-f <src>' to scp command to be run on the server
  • call do_cmd() to run assembled scp command on the server
  • do_cmd() forks a child which executes (via execvp()) “ssh -p <port> -l <remuser> — <host> <cmd>” scp command on the server. Connect parent and child via pipes. Parent accesses child's pipes via remin & remout. do_cmd_pid contains child's PID.
  • tolocal()→sink() receives file from child via remin & remout and stores it to the local destination
  • finaly wait for child to finish, check for errors, close remin & remout and exit

2) client runs ssh to spawn server side of scp

3) server accepts ssh connection from client

  • for -t or -f private flags: remin = stdin; remout = stdout
projects/openssh.txt · Last modified: 2019/12/25 16:34 by admin
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0