更新:これはあなたが実際に知りたい答えかもしれません: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は複数レベルの存在しないディレクトリを作成しないことに注意してください。