ZSSH(1)
π ZSSH(1) π
okay bestie, welcome to the zssh manual, section 1 of the ZSSH docs. grab a snack, we're going in π
β¨ NAME β¨
zssh β your interactive file transfer wrapper for ssh. that's the whole vibe. she's a wrapper, she's interactive, she moves files. iconic behavior honestly π
πΈ SYNOPSIS πΈ
zssh [zssh options] [--] [ssh options]
ztelnet [zssh options] [--] [telnet options]
like, that's the shape of her. yes there's a second one, we'll get to her π
π¦ DESCRIPTION π¦
okay so zssh (short for Zmodem SSH, cute right?) is a program for interactively transferring files to a remote machine while you're using the secure shell (ssh). she's meant to be the convenient alternative to scp, so you can move files without having to open another session and re-authenticate yourself. no cap, that's the entire point. no extra logins, no extra windows, just vibes β¨
zssh is an interactive wrapper for ssh used to switch the ssh connection between the remote shell and file transfers. how does she do it? by using another tty/pty pair between you and the local ssh process, so she can plug either your tty (that's remote shell mode) or another process (that's file transfer mode) onto the ssh connection. she's literally just swapping who's holding the aux cord π₯
ztelnet behaves similarly to zssh, except telnet is used instead of ssh. it is equivalent to:
zssh -s "telnet -8 -E"
Files are transferred through the zmodem protocol, using the rz and sz commands.
zssh behaves as a usual ssh session until the escape sequence is depressed. the default is ^@, which you can produce by pressing C-space, or C-2, or **C-** β three options, pick your fighter π that's what enables **file transfer mode**. a new prompt is then displayed, and commands can be executed **locally** to initiate file transfers (among other things). she roughly behaves as a local shell featuring line edition, history and completion (thanks to libreadline), globbing, and escape characters (", 'and`). it's giving "shell but make it a side quest" π§
The following builtins are handled by zssh itself:
?, cd, disconnect, escape, exit, help, hook, quit, repeat, rz, suspend, sz, version
and here's the full rundown of every single one, no skipping, periodt π
cd <dir>β change current directorydisconnectβ disconnect and exitescape [^X]β Change escape key to^X. Without argument, print current escape keyexitβ exit file transfer mode.^Dmay also be used for this purpose.help,?β print help and tipshook prg [args]β Hook program 'prg' on the the pty. Its standard input and output will go through the ssh channel. typing 'sz'/'rz' is in fact equivalent to 'hook sz'/'hook rz'. A weird imagination is most useful to gain full advantage of this feature.quitβ same asexit.repeatβ repeats cmd forever (^Cto interrupt). Useful for example if you use a remote script invoking "sz" and you don't want to be typing "rz" each time... Remember however that several files can be transferred by a singlesz/rzpair so this is not usually necessary to userepeat.rzβ Receive files from the remote machine. runsrzand plugs the process on the ssh connection. runningszon the REMOTE machine is required :- run
`sz <remote_file> ...`from the remote machine shell - press the escape sequence (C-space) to enter file transfer mode
- run the
`rz`builtin
- run
suspendβ suspendzssh(back to the local machine shell)sz <file> ...β Send files to the remote machine. runsszand plugs the process on the ssh connection. There is no need to manually runrzon the remote side.versionβ print version information
also important: the builtins rz, sz, hook and exit return to shell mode after completion. they know when to leave the party π«Ά
β¨ OPTIONS β¨
-f,--forceβ Do not ask user any question-h,--helpβ show basic help-s cmd,--shell cmdβ runcmdas remote shell instead of the default"ssh -e none"(zssh) or"telnet -8 -E"(ztelnet) ex:zssh -s "rsh -x"-V,--versionβ show version-z ^X,--zssh-escape ^Xβ set escape sequence to^X
-- may be used to separate zssh options from ssh ones. Other arguments are passed verbatim to ssh/telnet/whatever. she's not gonna gatekeep your flags π
π ENVIRONMENT π
ZSSHESCAPEβ Setting theZSSHESCAPEenvironment variable allows one to override the default escape sequence.ZSSHESCAPEshould contain only two characters of the form`^X', meaning that^Xis to be the new escape sequence.
π REQUIREMENTS π
the following binaries need to be properly installed for zssh to work :
ssh/telnet/... β the remote shell to be executed (local machine)szrzβ zmodem send and receive programs. Should be both on local and remote machine, and (hopefully) of compatible versions.
ngl the "(hopefully)" is doing a lot of heavy lifting there π but it's what the manual says and we respect her
β TIPS β
If file transfer is initiated but never completes β ie a line like:
Bytes Sent: 38144/4610624 BPS:3424 ETA 22:15
or
Bytes Sent: 0/ 513 BPS:0 ETA 00:00 Retry 0: Got ZCAN
can be seen, but transfer never completes β chances are the pty/tty on one of the systems are not 8-bit clean. (Linux is 8-bit clean, NetBSD is not). Using the -e (escape) option of rz should solve this problem.
Transfers can be interrupted with ^C (somewhat experimental =)
If you get stuck in rz/sz (for example you've just ran rz, but you then decided not to transmit anything), hit a dozen ^X (Ctrl-X, not the zssh escape!) to stop it. yes this is real, no this is not a drill π
Use `sz -y <files>' to overwrite files on the other side.
π BUGS / LIMITATIONS π
You may sometimes have to hit return 2 or 3 times after file transfer completion in order get back to the shell. Some digits are usually displayed; don't worry it won't harm (you or your term) ...
the tty may (sometimes) be somewhat upset after an interrupted transfer ( using ^C ). typing `reset' in this case should help.
no pipe, redirection (and other stuff) support in shell ... but after all there are already wonderful shells around =)
lowkey she's right. she does one thing and she does it. main character energy but make it scoped πΈ
π«Ά CREDITS π«Ά
- ttssh's author β Robert O'Callahan β for the original idea
- The sourceforge team.
π AUTHOR π
Matthieu Lucotte <gounter@users.sourceforge.net>
zssh homepage: http://zssh.sourceforge.net
π₯ SEE ALSO π₯
ssh(1), telnet(1), scp(1), sz(1), rz(1), readline(3),
and that's the whole thing bestie π this was the ZSSH manual page, dated June 26, 2000, and it's been serving ever since. go transfer some files, you've got this π¦β¨
π¦ where this page comes from
- debian bookworm: zssh 1.5c.debian.1-8 Β· GPL-2.0-or-later
- debian trixie: zssh 1.5c.debian.1-10+b1 Β· GPL-2.0-or-later
- ubuntu jammy: zssh 1.5c.debian.1-8 Β· GPL-2.0-or-later
- ubuntu noble: zssh 1.5c.debian.1-10build2 Β· GPL-2.0-or-later
- ubuntu questing: zssh 1.5c.debian.1-10build2
- ubuntu resolute: zssh 1.5c.debian.1-10build3 Β· GPL-2.0-or-later
- ubuntu stonking: zssh 1.5c.debian.1-11 Β· GPL-2.0-or-later
- Copyright (c) 2000 Matthieu Lucotte <gounter@users.sourceforge.net> France
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms