GNU/Linux >> Linux の 問題 >  >> Linux

コマンドラインでのSSHファイルコピーの魔法

Linuxシステム管理者は、SSHを毎日使用して、あるシステムから別のシステムに接続します。その理由は、Linuxシステムに安全に接続するための事実上のプロトコルだからです。最初のログイン交換を含む暗号化されたシステム間のすべてのトラフィックがあるため、安全です。最近、システム管理者がTelnetを使用しているのは、ウェブサーバーまたはリモートポートへのリモート接続をテストすることだけです。 OK、認めます。Telnetを使用して1つか2つの電子メールサーバーをハッキングすることは知られていますが、それはまた別の話です。私は逸脱します。 SSH関連のコマンドを使用して、SFTPまたはSCPを使用してホスト間でからにファイルを転送することもできます。 リモートシステムまたはfrom リモートシステム。しかし、私はあなたの友人を感動させ、おそらくあなたがそれをどのようにしたかについてペンとテラーを困惑させるクールなSSHの魔法のトリックをあなたに見せようとしています。

注: この手順では、ホスト間でSSHキーを交換する必要があります。その結果、接続を確立するためにパスワードを発行する必要がなくなります。

前提条件:SSHキーの生成

この不思議なことを実行する前に、システム間でSSHキーを使用できるようにシステムを準備する必要があります。実際、この手順はオプションですが、生活を楽にするために、実行することをお勧めします。

この例では簡単にするために、3つのシステムがあります。host1、host2、host3で、それぞれIPアドレス10.10.1.50、10.10.1.60、10.10.1.70を使用しています。以下の表は、このシナリオをより明確に示す方法である可能性があります。

host1 host2 host3
10.10.1.50 10.10.1.60 10.10.1.70

host1にログインし、次のコマンドを発行してSSHキーを生成します。

[host1] $ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <ENTER>
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <ENTER>
Enter same passphrase again: <ENTER>
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:XWk+zJ5Kphe/sT78yg1jLdQCybN4dE2o52eOihEuwPo root@rhel8
The key's randomart image is:
+---[RSA 2048]----+
|             ..  |
|         . ..+   |
|          *.= .  |
|   .     +.@..   |
|    o   S +oB .  |
|   . . . o.o.=o  |
|  .   . o o+O=.  |
|   .   . *.+=B.  |
|    E   o.oo*=o  |
+----[SHA256]-----+

上記のように続行するには、ENTERキーを3回押して、デフォルトを受け入れます。 テキストをスクリーンショットに配置しました。これらのエントリはターミナルウィンドウに表示されません。このホストのSSHキーを生成しました。 host2とhost3でこのプロセスを繰り返します。

キーをコピー

この手順は、ファイル転送やその他のSSHタイプの接続がパスワードプロンプトに制限されずに進行できるように、すべてのホストで双方向に実行する必要があります。これは、ホスト間でキーを交換するための最も簡単な方法です。

host1からhost2(10.10.1.60)に次のコマンドを発行します

[host1] $ ssh-copy-id khess@host2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/khess/.ssh/id_rsa.pub"
The authenticity of host 'host2 (10.10.1.60)' can't be established.
ECDSA key fingerprint is SHA256:fM/5eaHGa37W+0xq4QZfL+Y6NobRbCVH1G4uhQLAwMw.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
khess@host2's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'khess@host2'"
and check to make sure that only the key(s) you wanted were added.

そして、host1からhost3(10.10.1.70)に同じコマンドを発行します

[host1] $ ssh-copy-id khess@host3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/khess/.ssh/id_rsa.pub"
The authenticity of host 'host3 (10.10.1.70)' can't be established.
RSA key fingerprint is SHA256:Y0X9C7rVNiRgM4yuBH8DUOUed5d/N57VYO+aoRmXmP4.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
khess@host3's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'khess@host3'"
and check to make sure that only the key(s) you wanted were added.

これで、SSHタイプのトランザクションはhost1からhost2へ、およびhost1からhost3へはパスワードなしになります。

ホスト2と3に対してこのプロセスを繰り返します。

[host2] $ ssh-copy-id khess@host1

[host2] $ ssh-copy-id khess@host3

[host3] $ ssh-copy-id khess@host1

[host3] $ ssh-copy-id khess@host2

これにより、すべてのホスト間でキーがコピーされるため、任意のホストとの間のSSHタイプのトランザクションはパスワードなしになります。自分でテストして、自分自身に証明してください。

通常のことを行う

テストの目的で、ホームディレクトリの各システムにとして新しいファイルを作成します。これにより、1つのhost1にhost1.txt、host2にhost2.txt、host3にhost3.txtが作成されます。

予備的な非魔法の演習として、host1にログインし、host1.txtファイルをhost2とhost3にコピーします。宛先ファイルへのフルパスを指定する必要があります。

[host1] $ scp host1.txt khess@host2:/home/khess/host1.txt

host1.txt                                                                        100%   0   0.0KB/s   00:00

[host1] $ scp host1.txt khess@host3:/home/khess/host1.txt

host1.txt                                                                        100%   0   0.0KB/s   00:00

ファイルは空であるため、サイズが0で、転送速度が0.0KB/sであることがわかります。ファイルのサイズが異なる場合、これらの数値は異なります。 host2またはhost3のいずれかにログインし、ローカルファイルを他のリモートシステムにコピーする場合、この演習はまったく同じように見えます。これは特に面白くも魔法でもありません。

魔法:コピー

したがって、私の最後のファイルコピーのトリックでは、3番目のホストからどちらにもログインせずに、あるホストから別のホストにファイルをコピーするという真の魔法です。次のようになります:

host2.txtファイルをhost2からhost3にコピーするhost1からSCPセッションを開始します。それがコマンドラインでどのように見えるか見てみましょう。ソースシステムとターゲットシステムの両方で正確なパスを指定する必要があります。

[host1] $ scp khess@host2:/home/khess/host2.txt khess@host3:/home/khess/host2.txt

host2.txt                                                                 100%    0     0.0KB/s   00:00  

host2.txtファイルは、ログインせずにhost2からhost3にコピーします。魔法。

一般的に、このコマンドは次のようになります。

[hostX] $ scp user@source_host:/path/to/file user@target_host:/path/to/file

コピー中にターゲットファイルの名前を変更できます。この魔法のトリックを使用した自動スクリプトの可能性はありますか?

そして、これはあなたが「うわー、それは魔法だ!」と叫ぶところです。

まとめ

ご覧のとおり、SSHは1つだけではありません。これは、「SSH経由のXサービス」のように、パソコンとのやり取り、ファイルのコピー、その他の種類の通信の保護に使用される安全なプロトコルです。この記事では、リモートシステムにログインしたり、リモートシステムにファイルをコピーしたり、2つのリモートシステム間でファイルをコピーしたりするためにパスワードを入力する必要がないようにSSHキーを設定する方法を説明しました。システム間でSSHキーを設定すると、ファイルにパスワードを保存しなくても、ファイル操作などのタスクを簡単に自動化できます。そして、SSH / SCPをこのように使用することは実際には魔法ではありませんが、おそらくすでにそれを知っているでしょう。


Linux
  1. Linux でコマンドラインを使用して任意のファイルをダウンロードするための 4 つのツール

  2. ssh-keygen コマンドを使用してパスワードなしの ssh を構成する方法

  3. コマンドラインでSVNにSSHパスワードを提供するにはどうすればよいですか?

  1. Linux コマンドラインからフォルダーをコピーするにはどうすればよいですか?

  2. コマンドラインで gz 圧縮ファイルの最後の行を出力するには?

  3. SSH - ~/.ssh/config ファイルに -t コマンドを含める方法

  1. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  2. LinuxコマンドラインからのGoogleドライブの使用

  3. Linuxのコマンドラインを使用してファイルを作成する