2

在建立与远程计算机的 SSH 连接时,我需要将文件从本地计算机 (unix) 传输(复制)到远程计算机主机 (linux)。

使用 SSH 连接后,在与远程主机相同的 SSH 连接下,我使用终端中的什么命令将文件从本地计算机传输(复制/同步)到该远程主机?

我知道“scp”、“sftp”和“rsync”文件传输,但这些都是在 SSH 连接之外使用的,独立正确吗?...所以,我希望能够运行一个命令来复制该安全下的文件SSH 连接。

我可以在运行的 SSH 连接下使用 'scp'、'sftp'、'ftp' 或 'rsync' 命令吗?如果可以,如何?

谢谢!

4

1 回答 1

2

更新:这可能是您真正想知道的答案:https ://askubuntu.com/questions/13382/download-a-file-over-an-active-ssh-session/13586#13586

scp、sftp 等创建自己的 SSH 连接,除非它们通过已打开的某个端口进行隧道连接。无论何时从命令行运行它们都是如此,无论该命令行是否是现有 SSH 会话的一部分。隧道数据效率低下,并且不比独立的 SSH 连接更安全,除非您试图在服务器之间中继以隐藏您自己的地址。

为了做你想做的事,你需要设置你的本地计算机以允许 SSH 访问。然后,您可以简单地执行“scp -P 4321 yourUserName@yourlocalhostsexternalhostname:path/to/file.txt ./”之类的操作,以便在您登录到服务器的同时将文件复制到您的服务器。

一直键入该命令很痛苦,我更喜欢在本地 Unix 计算机上的命令行中工作,并将当前工作目录同步到服务器上它所属的任何位置。我正在包括我的程序来执行此操作(它仅适用于您将成为运行它的人 - 有很多不安全的行过于信任用户的输入)。

该程序非常易于使用,以至于几年来我从未使用其他任何东西将我在本地计算机上工作的文件传输到我的实时网络服务器。当我为别人工作时,我总是想念这个项目。

为了使用这个程序,您必须在当前目录或任何父目录中创建一个文件“.root”。“.root”文件指定根目录在服务器上的位置。这样,我的程序可以准确地找到该根目录的任何子目录所属的位置。它大大提高了 rsync 的效率,因为它不是通过我的整个网站进行 rsync,而是简单地对我当时正在处理的网站部分进行 rsync。

#!/usr/bin/perl
# cpwd
# make sure it is in your path
$flagjpeg = "--exclude '*.JPG'";
my $J = shift;
$flagjpeg = "" if $J eq 'JPG';
$n = 10;
$wd = '';
while (! -f '.root') {
$pwd = `pwd | xargs basename`;
chomp $pwd;
$wd = "$pwd/$wd";
chdir('..');
last if $n-- < 1;
}

# chop $wd;

if (! -f '.root') {
    print "No root found!\n";
    exit;
}
$root = `head -1 .root`;
chomp $root;
@cmds = ($root =~ m/(\S+)/g);
$root = pop(@cmds);
$source = "$wd" || './';
$dest = "$root/$source";

print "copy '@cmds' '$source' (to) '$dest'\n";

my $cmd = "(rsync @cmds -vv --max-size=1208KiB $flagjpeg --exclude '*.ezip' --exclude '*.tgz' --exclude '*.gz' -C -avz $source $dest 2>&1) > /tmp/cpwd.log";
chomp(my $mypwd = `pwd`);
my $cmdlarge = "cd '$mypwd'; (rsync @cmds -vv $flagjpeg --exclude '*.ezip' --exclude '*.tgz' --exclude '*.gz' -C -avz $source $dest 2>&1) > /tmp/cpwd.log";

print "$cmd\n$cmdlarge\n\n";

# exit;

system($cmd);

system("grep -e 'over max-size' -e 'sender finished' /tmp/cpwd.log");
system("tail -4 /tmp/cpwd.log | head -3");

“.root”文件示例:

$ cat .root
myname@server.net:www

带有额外标志的“.root”文件示例:

$ cat .root
 -e 'ssh -p 4321 -C' yourname@host2468.hosthosthost.com:www

一旦“cpwd”程序在您的路径中并且“.root”文件在当前或父目录中的某个位置创建,您需要做的就是在您的网站上工作并转到命令行(想到 Ctrl-Z ) 和类型

$ cpwd

为了将工作目录中的所有内容同步到您的网站,如 .root 文件中指定的那样。

请注意,为了安全起见,cpwd 不会创建多于一级的不存在目录,以防万一您弄错了“.root”文件并尝试将整个网站复制到网络服务器的子目录中。

于 2013-03-26T03:10:38.937 回答