upstream: Prepare for a future where scp(1) uses the SFTP protocol by

default. Replace recently added -M option to select the protocol with -O
(olde) and -s (SFTP) flags, and label the -s flag with a clear warning that
it will be removed in the near future (so no, don't use it in scripts!).

prompted by/feedback from deraadt@

OpenBSD-Commit-ID: 92ad72cc6f0023c9be9e316d8b30eb6d8d749cfc
This commit is contained in:
djm@openbsd.org 2021-08-10 03:33:34 +00:00 committed by Damien Miller
parent bfdd4b722f
commit 391ca67fb9
2 changed files with 31 additions and 26 deletions

34
scp.1
View File

@ -8,9 +8,9 @@
.\"
.\" Created: Sun May 7 00:14:37 1995 ylo
.\"
.\" $OpenBSD: scp.1,v 1.98 2021/08/09 23:56:36 djm Exp $
.\" $OpenBSD: scp.1,v 1.99 2021/08/10 03:33:34 djm Exp $
.\"
.Dd $Mdocdate: August 9 2021 $
.Dd $Mdocdate: August 10 2021 $
.Dt SCP 1
.Os
.Sh NAME
@ -18,14 +18,13 @@
.Nd OpenSSH secure file copy
.Sh SYNOPSIS
.Nm scp
.Op Fl 346ABCpqRrTv
.Op Fl 346ABCOpqRrsTv
.Op Fl c Ar cipher
.Op Fl D Ar sftp_server_path
.Op Fl F Ar ssh_config
.Op Fl i Ar identity_file
.Op Fl J Ar destination
.Op Fl l Ar limit
.Op Fl M Ar scp | sftp
.Op Fl o Ar ssh_option
.Op Fl P Ar port
.Op Fl S Ar program
@ -112,7 +111,7 @@ Selects the cipher to use for encrypting the data transfer.
This option is directly passed to
.Xr ssh 1 .
.It Fl D Ar sftp_server_path
When using the experimental SFTP protocol support via
When using the SFTP protocol support via
.Fl M ,
connect directly to a local SFTP server program rather than a
remote one via
@ -144,14 +143,12 @@ This option is directly passed to
.Xr ssh 1 .
.It Fl l Ar limit
Limits the used bandwidth, specified in Kbit/s.
.It Fl M Ar scp | sftp
Specifies a mode which will be used to transfer files.
The default is to use the original
.Cm scp
protocol.
Alternately, experimental support for using the
.Cm sftp
protocol is available.
.It Fl O
Use the legacy SCP protocol for file transfers instead of the SFTP protocol.
Forcing the use of the SCP protocol may be necessary for servers that do
not implement SFTP or for backwards-compatibility for particular filename
wildcard patterns.
This mode is the default.
.It Fl o Ar ssh_option
Can be used to pass options to
.Nm ssh
@ -261,6 +258,16 @@ to use for the encrypted connection.
The program must understand
.Xr ssh 1
options.
.It Fl s
Use the SFTP protocol for file transfers instead of the legacy SCP protocol.
Using SFTP provides avoids invoking a shell on the remote side and provides
more predictable filename handling, as the SCP protocol
relied on the remote shell for expanding
.Xr glob 3
wildcards.
.Pp
A near-future release of OpenSSH will make the SFTP protocol the default.
This option will be deleted before the end of 2022.
.It Fl T
Disable strict filename checking.
By default when copying files from a remote host to a local directory
@ -290,6 +297,7 @@ debugging connection, authentication, and configuration problems.
.Xr ssh-agent 1 ,
.Xr ssh-keygen 1 ,
.Xr ssh_config 5 ,
.Xr sftp-server 8 ,
.Xr sshd 8
.Sh HISTORY
.Nm

23
scp.c
View File

@ -1,4 +1,4 @@
/* $OpenBSD: scp.c,v 1.229 2021/08/09 23:56:36 djm Exp $ */
/* $OpenBSD: scp.c,v 1.230 2021/08/10 03:33:34 djm Exp $ */
/*
* scp - secure remote copy. This is basically patched BSD rcp which
* uses ssh to do the data transfer (instead of using rcmd).
@ -448,7 +448,6 @@ main(int argc, char **argv)
const char *errstr;
extern char *optarg;
extern int optind;
/* For now, keep SCP as default */
enum scp_mode_e mode = MODE_SCP;
char *sftp_direct = NULL;
@ -482,7 +481,7 @@ main(int argc, char **argv)
fflag = Tflag = tflag = 0;
while ((ch = getopt(argc, argv,
"12346ABCTdfpqRrtvD:F:J:M:P:S:c:i:l:o:")) != -1) {
"12346ABCTdfOpqRrstvD:F:J:M:P:S:c:i:l:o:")) != -1) {
switch (ch) {
/* User-visible flags. */
case '1':
@ -517,6 +516,12 @@ main(int argc, char **argv)
addargs(&args, "-%c", ch);
addargs(&args, "%s", optarg);
break;
case 'O':
mode = MODE_SCP;
break;
case 's':
mode = MODE_SFTP;
break;
case 'P':
sshport = a2port(optarg);
if (sshport <= 0)
@ -526,14 +531,6 @@ main(int argc, char **argv)
addargs(&remote_remote_args, "-oBatchmode=yes");
addargs(&args, "-oBatchmode=yes");
break;
case 'M':
if (strcmp(optarg, "sftp") == 0)
mode = MODE_SFTP;
else if (strcmp(optarg, "scp") == 0)
mode = MODE_SCP;
else
usage();
break;
case 'l':
limit_kbps = strtonum(optarg, 1, 100 * 1024 * 1024,
&errstr);
@ -1987,8 +1984,8 @@ void
usage(void)
{
(void) fprintf(stderr,
"usage: scp [-346ABCpqRrTv] [-c cipher] [-D sftp_server_path] [-F ssh_config]\n"
" [-i identity_file] [-J destination] [-l limit] [-M scp|sftp]\n"
"usage: scp [-346ABCOpqRrsTv] [-c cipher] [-D sftp_server_path] [-F ssh_config]\n"
" [-i identity_file] [-J destination] [-l limit]\n"
" [-o ssh_option] [-P port] [-S program] source ... target\n");
exit(1);
}