サーバーAからBにギガバイトのデータを転送したいです。異なるネットワークにありますが、どちらもSSHを介してアクセスできます。私は別のネットワーク(AでもBでもない)にいるので、システムを介してトンネリングするよりもサーバー間の転送を好みます。 SSHなどの暗号化されたチャネルでこれを行うための最良の方法は何ですか?
最も簡単なオプションは、おそらく暗号化されたタールパイプ(tar | openssl enc | netcat
)です。しかし、それほどきれいな感じではありません。
別のオプションは、一時的にユーザーを追加してSSHパイプ(tar | ssh
)と一緒に使用するか、一時的に既存のユーザーに認証キーを追加して同じ操作を実行することです。これは、サーバーの1つに特定の条件を待つマルウェアがある可能性が無視できる場合でも、競合状態を可能にします。完全にきれいな感じでもありません。
このワンタイムデータ転送のための最良の方法は何ですか?
答え1
私が正しく理解したら、AとBの間、つまりAからBへのSSH接続を確立したいと思います。 AからBへのTCP接続を確立することは可能ですが(Bはファイアウォールの背後にないため、これは不可能です)、Aが信頼できない場合、AのユーザーがBにログインすることを許可すると、Bでセキュリティ違反が発生する可能性があります。 。 。
OpenSSHはこれに簡単なソリューションを提供します。存在する~/.ssh/authorized_keys
を使用すると、1つのコマンドのみを実行するようにキーストロークを制限できます。 A:に新しいキーペアを作成します。
serverA$ ssh-keygen -N '' -f ~/.ssh/copy_to_B.id_rsa
serverA$ cat ~/.ssh/copy_to_B.id_rsa.pub
生成された公開鍵を取得し、行末にforceコマンドを追加します。またrestrict
、ポート転送のブロックなどのオプションを追加します(たとえば、AがBのファイアウォール境界内で要求を実行できるようにすることができます)。 Bの新しい行は~/.ssh/authorized_keys
次のとおりです。
ssh-rsa AAAA… luc@serverA restrict command="cat >~/backups/B/latest.tgz"
このキーを使用してBにログインすると、それに渡したcat >~/backups/B/latest.tgz
内容に関係なくコマンドが実行されますssh
。このようにBができることはファイルに書くだけです。
serverA$ tar … | ssh -i ~/.ssh/copy_to_B.id_rsa luc@serverB whatever
BのSSHサーバーが十分に新しくない場合は、SSHサーバーがない可能性がありますrestrict
。そうでない場合は、そのサーバーと利用可能な他のすべてのオプションをrestrict
使用してください(確認B)。no-port-forwarding
no-…
man sshd
変数を使用してforceコマンドで元のコマンドを参照できますが、SSH_ORIGINAL_COMMAND
ここで複雑な操作を実行すると、セキュリティホールが開いていないことを確認するのが難しい場合があります。これは、必要なファイル名をコマンドとして渡して、Bがどのファイルにも書き込むことを可能にする簡単なラッパーです~/backups/B
。ラッパーは書き込みを防ぐために文字をホワイトリストに追加します../../.ssh/authorized_keys
。
ssh-rsa AAAA… luc@serverA restrict command="case $SSH_ORIGINAL_COMMAND in *[!-.A-Za-z0-9_]*) echo >&2 'bad target file'; exit 120;; [!-.]*) cat >~/backups/B/\"$SSH_ORIGINAL_COMMAND\";; *) echo >&2 'bad target file'; exit 120;; esac"
答え2
SSH認証だけでなく、ファイル権限と所有権のためにアクセスするには、有効なユーザーを使用する必要があります。
私はオンラインでお金を転送するのが大好きですrsync
。増分データ転送を再開できます。これは、2つのサーバー間のネットワーク接続を完全に制御できない場合のデフォルトです。
答え3
A
SSHを実行できB
、実行中のエージェントがあると仮定する場合ssh
:
ssh -A A '
cd /src && tar cf - . | gzip -1 | ssh B "
cd /dst && gunzip | tar xpf -"'
を渡すと、リモートユーザーにSSHエージェントへのアクセス権が-A
付与されます。A
サーバー管理者またはリモートユーザーアカウントにアクセスできる人を信頼していない場合は、これをしたくありません。 SSHキーを取得することはできませんが、ssh
コマンドの実行中にそれを使用して他のコンピュータに認証できます。