通过SSH连接进行文件传输
我需要在与远程计算机建立SSH连接的同时,将文件从本地计算机(unix)传输(复制)到远程计算机主机(linux) 在使用SSH连接之后,并且在与远程主机的相同SSH连接下,我使用终端中的哪个命令将文件从本地计算机传输(复制/同步)到该远程主机 我知道“scp”、“sftp”和“rsync”文件传输,但这些都是在SSH连接之外使用的,独立正确吗?…因此,我希望能够运行一个命令,在该安全SSH连接下复制文件 我可以在运行的SSH连接下使用“scp”、“sftp”、“ftp”或“rsync”命令吗?如果可以,如何使用通过SSH连接进行文件传输,ssh,terminal,file-transfer,Ssh,Terminal,File Transfer,我需要在与远程计算机建立SSH连接的同时,将文件从本地计算机(unix)传输(复制)到远程计算机主机(linux) 在使用SSH连接之后,并且在与远程主机的相同SSH连接下,我使用终端中的哪个命令将文件从本地计算机传输(复制/同步)到该远程主机 我知道“scp”、“sftp”和“rsync”文件传输,但这些都是在SSH连接之外使用的,独立正确吗?…因此,我希望能够运行一个命令,在该安全SSH连接下复制文件 我可以在运行的SSH连接下使用“scp”、“sftp”、“ftp”或“rsync”命令吗?
谢谢 更新:这可能是您真正想知道的答案: scp、sftp等创建自己的SSH连接,除非它们通过已打开的特定端口进行隧道传输。无论命令行是否是现有SSH会话的一部分,只要从命令行运行它们,都是如此。隧道数据效率低下,并且不比独立的SSH连接更安全,除非您试图在服务器之间中继以隐藏自己的地址 要执行所需操作,需要设置本地计算机以允许SSH访问。然后你可以简单地做一些像“scp-P4321”这样的事情yourUserName@yourlocalhostsexternalhostname:path/to/file.txt./“以便在登录到服务器的同时将文件复制到服务器 一直键入该命令是一件痛苦的事情,我更喜欢在本地Unix计算机上的命令行中工作,只将当前工作目录同步到服务器上它所属的任何位置。我包括了我的程序来做这件事(它只为运行它的人而设计——有很多不安全的行太信任用户的输入) 这个程序非常容易使用,我已经有好几年没有使用任何其他东西将我在本地计算机上工作的文件传输到我的live Web服务器了。当我为别人工作时,我总是错过这个节目 要使用此程序,必须在当前目录或任何父目录中创建文件“.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
-e 'ssh -p 4321 -C' yourname@host2468.hosthosthost.com:www
一旦“cpwd”程序在您的路径中,并且在当前或父目录中的某个位置创建了“.root”文件,您所需要做的就是在您的网站上工作,然后转到命令行(想到Ctrl-Z)并键入
以便按照.root文件中的指定将工作目录中的所有内容同步到您的网站
请注意,为了安全起见,cpwd不会创建多个级别的不存在目录,以防您无意中弄乱了“.root”文件并试图将整个网站复制到Web服务器的子目录中。您最好以超级用户exchange()或Unix和Linux exchange()的身份询问此问题这是离题的。
$ cat .root
-e 'ssh -p 4321 -C' yourname@host2468.hosthosthost.com:www
$ cpwd