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コンピュータのコマンドラインで作業し、現在の作業ディレクトリだけをサーバー上のどこにでも同期することを好みます。私はこれを行うために私のプログラムを含めています(それはあなたがそれを実行する人になるときだけのために設計されています-ユーザーの入力をあまりにも信頼する安全でない行がたくさんあります)。

このプログラムは非常に使いやすいので、数年間、ローカルコンピューターで作業しているファイルをライブWebサーバーに転送するために他に何も使用したことがありません。そして、私が他の人のために働いているとき、私はいつもこのプログラムを逃します。

このプログラムを使用するには、現在のディレクトリまたは任意の親ディレクトリ内にファイル「.root」を作成する必要があります。「.root」ファイルは、ルートディレクトリが属するサーバー上の場所を指定します。このようにして、私のプログラムは、そのルートディレクトリの任意のサブディレクトリが属する場所を正確に見つけることができます。また、rsyncの効率が大幅に向上します。これは、Webサイト全体をrsyncするのではなく、その瞬間に作業しているWebサイトの一部を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」ファイルが現在のディレクトリまたは親ディレクトリのどこかに作成されたら、Webサイトで作業してコマンドラインに移動するだけです(Ctrl-Zが頭に浮かびます)。 )と入力します

$ cpwd

.rootファイルで指定されているように、作業ディレクトリ内のすべてをWebサイトに同期するため。

安全のため、誤って「.root」ファイルを削除してWebサーバーのサブディレクトリ内にWebサイト全体を複製しようとした場合に備えて、cpwdは複数レベルの存在しないディレクトリを作成しないことに注意してください。

于 2013-03-26T03:10:38.937 に答える