PSCPを使用して、ローカルのWindowsマシンからリモートのLinuxサーバーにファイルを移動しようとしています。ユーザー名とパスワードを使用してリモートLinuxマシンにアクセスできるように、VPNに接続しています。
転送用のPSCPコマンドは次のとおりです。
pscp C:\Users\username\Desktop\list.txt PEM\[email protected]:/home/local/PEM/username
これはエラーになります
ローカルからローカルへのコピーはサポートされていません
私は試用のためだけにこのコマンドを試しました
pscp C:\Users\username\Desktop\list.txt [email protected]:/home/local/PEM/username
上記のコマンドを実行すると、パスワードを要求されました。しかし、パスワードを入力すると、アクセスが拒否されます。これは、リモートLinuxマシンのユーザー名がusername
ではなくPEM/username
であるためです。ただし、PEM/username
を使用すると、"ローカルからローカルへのコピーはサポートされません"エラーメッセージが表示されます。ユーザー名\
のスラッシュPEM\username
と関係がありますか?
はい、それはバックスラッシュです。
これを回避するには、-l
スイッチでユーザー名を指定します。
pscp -l PEM\username C:\Users\username\Desktop\list.txt 10.120.43.78:/home/local/PEM/username
バックグラウンド:
PSCPは、ターゲットの最初のコロン、スラッシュ、またはバックスラッシュを探します。最初のシンボルがコロンの場合のみ、ターゲットをリモートと見なし、それ以外の場合はローカルと見なします。
/*
* Find a colon in str and return a pointer to the colon.
* This is used to separate hostname from filename.
*/
static char *colon(char *str)
{
/* We ignore a leading colon, since the hostname cannot be
empty. We also ignore a colon as second character because
of filenames like f:myfile.txt. */
if (str[0] == '\0' || str[0] == ':' ||
(str[0] != '[' && str[1] == ':'))
return (NULL);
str += Host_strcspn(str, ":/\\");
if (*str == ':')
return (str);
else
return (NULL);
}
...
if (colon(argv[argc - 1]) != NULL)
toremote(argc, argv);
else
tolocal(argc, argv);
私はあなたがWindowsファイルパスの後にアポストロフィがないと思います:
pscp "C:\Users\username\Desktop\list.txt" PEM\[email protected]:/home/local/PEM/username