場合によっては、リモート マシンでいくつかのコマンドを実行する必要があることがあります。これが時々行われる操作である場合は、リモート システムにログインしてコマンドを直接実行することで、この目的を達成できます。しかし、毎回これを行うのは面倒です。この場合、この面倒な操作をなくすためのより良い解決策はありますか? はい、リモート システムにログインしなくても、ローカル システムからこれらの操作を実行できます。これには何か利点がありますか?間違いない。これにより、多くの時間を節約できます。 これはどのように達成されるのでしょうか? SSH を使用すると、ログインせずにリモート コンピューターでコマンドを実行できます。 一般的な構文は次のとおりです。 $ ssh [ユーザー名]@[リモートホスト名またはIP] [コマンドまたはスクリプト] 1) SSH経由でリモートLinuxシステム上でコマンドを実行する方法 次の例では、ユーザーが ssh 経由でリモート Linux マシン上で df コマンドを実行できるようになります。 $ ssh [email protected] df -h ファイルシステムサイズ 使用済み 使用可能使用率 マウント先 /dev/mapper/centos-root 27G 4.4G 23G 17% / devtmpfs 903M 0 903M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 9.3M 910M 2% /実行 tmpfs 920M 0 920M 0% /sys/fs/cgroup /dev/sda1 1014M 179M 836M 18% /ブート tmpfs 184M 8.0K 184M 1% /run/user/42 tmpfs 184M 0 184M 0% /run/user/1000 2) SSH経由でリモートLinuxシステム上で複数のコマンドを実行する方法 次の例では、ユーザーは ssh 経由でリモート Linux マシン上で複数のコマンドを同時に実行できます。 リモート Linux システムで uptime コマンドと free コマンドを同時に実行します。 $ ssh [email protected] "稼働時間 && 無料 -m" 23:05:10 10 分経過、ユーザー 0 人、平均負荷: 0.00、0.03、0.03 キャッシュされた未使用の共有バッファの合計 会員数: 1878 432 1445 1 100 134 -/+ バッファ/キャッシュ: 197 1680 スワップ: 3071 0 3071 3) SSH経由でリモートLinuxシステム上でsudo権限でコマンドを実行する方法 次の例では、ユーザーが ssh 経由でリモート Linux マシン上で sudo 権限を使用して fdisk コマンドを実行できるようにします。 通常のユーザーは、システムバイナリ (/usr/sbin/) ディレクトリで提供されるコマンドを実行することはできません。実行するにはユーザーが root 権限を持っている必要があります。 したがって、Linux システムで fdisk コマンドを実行するには、root 権限が必要です。 which コマンドは、指定されたコマンドの完全な実行可能パスを返します。 $ どのfdisk /usr/sbin/fdisk $ ssh -t [email protected] "sudo fdisk -l" [sudo] daygeekのパスワード: ディスク /dev/sda: 32.2 GB、32212254720 バイト、62914560 セクタ 単位 = 1 セクター * 512 = 512 バイト セクターサイズ(論理/物理):512バイト/512バイト I/O サイズ (最小/最適): 512 バイト / 512 バイト ディスクラベルタイプ: dos ディスク識別子: 0x000bf685 デバイス ブート 開始 終了 ブロック ID システム /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 62914559 30407680 8e Linux LVM ディスク /dev/sdb: 10.7 GB、10737418240 バイト、20971520 セクタ 単位 = 1 セクター * 512 = 512 バイト セクターサイズ(論理/物理):512バイト/512バイト I/O サイズ (最小/最適): 512 バイト / 512 バイト ディスク /dev/mapper/centos-root: 29.0 GB、28982640640 バイト、56606720 セクタ 単位 = 1 セクター * 512 = 512 バイト セクターサイズ(論理/物理):512バイト/512バイト I/O サイズ (最小/最適): 512 バイト / 512 バイト ディスク /dev/mapper/centos-swap: 2147 MB、2147483648 バイト、4194304 セクタ 単位 = 1 セクター * 512 = 512 バイト セクターサイズ(論理/物理):512バイト/512バイト I/O サイズ (最小/最適): 512 バイト / 512 バイト centos7.2daygeek.com への接続が閉じられました。 4) SSH経由でリモートLinuxシステム上でsudo権限でサービス制御コマンドを実行する方法 次の例では、ユーザーが ssh 経由でリモート Linux マシン上で sudo 権限を使用してサービス制御コマンドを実行できるようにします。 $ ssh -t [email protected] "sudo systemctl httpd を再起動します" [sudo] daygeekのパスワード: centos7.2daygeek.com への接続が閉じられました。 5) 非標準ポート経由でSSH経由でリモートLinuxシステム上でコマンドを実行する方法 次の例では、ユーザーは ssh 経由で非標準ポートを使用してリモート Linux マシン上で hostnamectl コマンドを実行できます。 $ ssh -p 2200 [email protected] ホスト名ctl 静的ホスト名: Ubuntu18.2daygeek.com アイコン名: computer-vm シャーシ: vm マシンID: 27f6c2febda84dc881f28fd145077187 ブート ID: bbeccdf932be41ddb5deae9e5f15183d 仮想化: Oracle オペレーティング システム: Ubuntu 18.04.2 LTS カーネル: Linux 4.15.0-60-generic アーキテクチャ: x86-64 6) リモートシステムの出力をローカルシステムに保存する方法 次の例では、ユーザーは ssh 経由でリモート Linux マシン上で top コマンドを実行し、出力をローカル システムに保存できます。 $ ssh [email protected] "top -bc | head -n 35" > /tmp/top-output.txt cat /tmp/top-output.txt トップ - 01:13:11 18 分前に起動、ユーザー 1 人、平均負荷: 0.01、0.05、0.10 タスク: 合計 168、実行中 1、スリープ中 167、停止中 0、ゾンビ 0 %CPU: 0.0 us、6.2 sy、0.0 ni、93.8 id、0.0 wa、0.0 hi、0.0 si、0.0 st KiB メモリ: 合計 1882300、空き 1176324、使用中 342392、バフ/キャッシュ 363584 KiB スワップ: 合計 2097148、空き 2097148、使用済み 0。使用可能なメモリ 1348140 PID ユーザー PR NI 仮想リソース SHR S %CPU %MEM 時間+ コマンド 4943 デイギーク 20 0 162052 2248 1612 R 10.0 0.1 0:00.07 トップ -bc 1 ルート 20 0 128276 6936 4204 S 0.0 0.4 0:03.08 /usr/lib/sy+ 2 ルート 20 0 0 0 0 S 0.0 0.0 0:00.00 [kthreadd] 3 ルート 20 0 0 0 0 S 0.0 0.0 0:00.25 [ksoftirqd/+ 4 ルート 20 0 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:+ 5 ルート 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:+ 7 ルート rt 0 0 0 0 S 0.0 0.0 0:00.00 [移行/+ 8 ルート 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh] 9 ルート 20 0 0 0 0 S 0.0 0.0 0:00.77 [rcu_sched] 10 ルート 0 -20 0 0 0 S 0.0 0.0 0:00.00 [lru-add-dr+ 11 ルート rt 0 0 0 0 S 0.0 0.0 0:00.01 [ウォッチドッグ/0] 13 ルート 20 0 0 0 0 S 0.0 0.0 0:00.00 [kdevtmpfs] 14 ルート 0 -20 0 0 0 S 0.0 0.0 0:00.00 [netns] 15 ルート 20 0 0 0 0 S 0.0 0.0 0:00.00 [khungtaskd] 16 ルート 0 -20 0 0 0 S 0.0 0.0 0:00.00 [書き戻し] 17 ルート 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kintegrity+ 18 ルート 0 -20 0 0 0 S 0.0 0.0 0:00.00 [バイオセット] 19 ルート 0 -20 0 0 0 S 0.0 0.0 0:00.00 [バイオセット] 20 ルート 0 -20 0 0 0 S 0.0 0.0 0:00.00 [バイオセット] あるいは、次の形式を使用して、リモート システムで複数のコマンドを実行することもできます。 $ ssh [email protected] << EOF ホスト名ctl 無料 -m grep daygeek /etc/passwd 終了 上記のコマンドの出力は次のようになります。 stdin は端末ではないため、疑似端末は割り当てられません。 静的ホスト名: CentOS7.2daygeek.com アイコン名: computer-vm シャーシ: vm マシンID: 002f47b82af248f5be1d67b67e03514c ブート ID: dca9a1ba06374d7d96678f9461752482 仮想化: kvm オペレーティング システム: CentOS Linux 7 (コア) CPE OS 名: cpe:/o:centos:centos:7 カーネル: Linux 3.10.0-957.el7.x86_64 アーキテクチャ: x86-64 使用可能な使用済み空き共有バフ/キャッシュの合計 会員数: 1838 335 1146 11 355 1314 スワップ: 2047 0 2047 daygeek:x:1000:1000:2daygeek:/home/daygeek:/bin/bash 7) リモートシステムでローカル Bash スクリプトを実行する方法 次の例では、ユーザーが ssh 経由でリモート Linux マシン上でローカル bash スクリプト remote-test.sh を実行できるようにします。 シェルスクリプトを作成して実行します。 $ vi /tmp/リモートテスト.sh #!/bin/bash #名前: remote-test.sh #-------------------- 稼働時間 無料 -m df -h ユーネーム -a ホスト名ctl 上記のコマンドの出力は次のようになります。 $ ssh [email protected] 'bash -s' < /tmp/remote-test.sh 01:17:09 22 分経過、ユーザー 1 人、平均負荷: 0.00、0.02、0.08 使用可能な使用済み空き共有バフ/キャッシュの合計 会員数: 1838 333 1148 11 355 1316 スワップ: 2047 0 2047 ファイルシステムサイズ 使用済み 使用可能使用率 マウント先 /dev/mapper/centos-root 27G 4.4G 23G 17% / devtmpfs 903M 0 903M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 9.3M 910M 2% /実行 tmpfs 920M 0 920M 0% /sys/fs/cgroup /dev/sda1 1014M 179M 836M 18% /ブート tmpfs 184M 12K 184M 1% /run/user/42 tmpfs 184M 0 184M 0% /run/user/1000 Linux CentOS7.2daygeek.com 3.10.0-957.el7.x86_64 #1 SMP 木 11月 8日 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 静的ホスト名: CentOS7.2daygeek.com アイコン名: computer-vm シャーシ: vm マシンID: 002f47b82af248f5be1d67b67e03514c ブート ID: dca9a1ba06374d7d96678f9461752482 仮想化: kvm オペレーティング システム: CentOS Linux 7 (コア) CPE OS 名: cpe:/o:centos:centos:7 カーネル: Linux 3.10.0-957.el7.x86_64 アーキテクチャ: x86-64 代わりに、パイプを使用することもできます。出力がきれいでないと思われる場合は、よりエレガントになるように変更を加えます。 $ vi /tmp/リモートテスト1.sh #!/bin/bash #名前: remote-test.sh echo "---------システム稼働時間------------------------------------------" 稼働時間 エコー -e "\n" echo "---------メモリ使用量----------------------------------------------------------" 無料 -m エコー -e "\n" echo "---------ディスク使用量----------------------------------------------" df -h エコー -e "\n" echo "---------カーネルバージョン--------------------------------------------------------" ユーネーム -a エコー -e "\n" echo "---------ホスト名情報------------------------------------------" ホスト名ctl エコー "------------------------------------------------------------------" 上記のスクリプトの出力は次のようになります。 $ cat /tmp/remote-test.sh | ssh [email protected] stdin は端末ではないため、疑似端末は割り当てられません。 ---------システム稼働時間------------------------------------------ 03:14:09 2:19 起動、ユーザー 1 人、負荷平均: 0.00、0.01、0.05 ---------メモリ使用量------------------------------------------- 使用可能な使用済み空き共有バフ/キャッシュの合計 会員数: 1838 376 1063 11 398 1253 スワップ: 2047 0 2047 ---------ディスク使用量------------------------------------------------- ファイルシステムサイズ 使用済み 使用可能使用率 マウント先 /dev/mapper/centos-root 27G 4.4G 23G 17% / devtmpfs 903M 0 903M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 9.3M 910M 2% /実行 tmpfs 920M 0 920M 0% /sys/fs/cgroup /dev/sda1 1014M 179M 836M 18% /ブート tmpfs 184M 12K 184M 1% /run/user/42 tmpfs 184M 0 184M 0% /run/user/1000 tmpfs 184M 0 184M 0% /run/user/0 ---------カーネルバージョン-------------------------------------------------------- Linux CentOS7.2daygeek.com 3.10.0-957.el7.x86_64 #1 SMP 木 11月 8日 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux ---------ホスト名情報------------------------------------------ 静的ホスト名: CentOS7.2daygeek.com アイコン名: computer-vm シャーシ: vm マシンID: 002f47b82af248f5be1d67b67e03514c ブート ID: dca9a1ba06374d7d96678f9461752482 仮想化: kvm オペレーティング システム: CentOS Linux 7 (コア) CPE OS 名: cpe:/o:centos:centos:7 カーネル: Linux 3.10.0-957.el7.x86_64 アーキテクチャ: x86-64 8) 複数のリモートシステムで複数のコマンドを同時に実行する方法 次の bash スクリプトを使用すると、ユーザーは複数のリモート システムで複数のコマンドを同時に実行できます。単純な for ループを使用して実装されています。 これを実現するには、PSSH コマンド、ClusterShell コマンド、または DSH コマンドを試すことができます。 $ vi /tmp/複数ホスト.sh CentOS7.2daygeek.com のホスト用 CentOS6.2daygeek.com する ssh daygeek@${host} "uname -a;uptime;date;w" 終わり 上記のスクリプトの出力は次のようになります。 $ sh 複数ホスト.sh Linux CentOS7.2daygeek.com 3.10.0-957.el7.x86_64 #1 SMP 木 11月 8日 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 01:33:57 39 分経過、ユーザー 1 人、平均負荷: 0.07、0.06、0.06 2019年9月25日水曜日 01:33:57 CDT 01:33:57 39 分経過、ユーザー 1 人、平均負荷: 0.07、0.06、0.06 ユーザー TTY 送信者 [email protected] アイドル JCPU PCPU 何 daygeek pts/0 192.168.1.6 01:08 23:25 0.06秒 0.06秒 -bash Linux CentOS6.2daygeek.com 2.6.32-754.el6.x86_64 #1 SMP 火曜 6月19日 21:26:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 23:33:58 39 分経過、ユーザー 0 人、平均負荷: 0.00、0.00、0.00 2019年9月24日火曜日 23:33:58 MST 23:33:58 39 分経過、ユーザー 0 人、平均負荷: 0.00、0.00、0.00 ユーザー TTY 送信者 [email protected] アイドル JCPU PCPU 何 9) sshpassコマンドを使用してパスワードを追加する方法 毎回パスワードを入力するのが面倒な場合は、ニーズに応じて次のいずれかの方法を選択してこの問題を解決することをお勧めします。 同様の操作を頻繁に行う場合は、標準的かつ永続的なソリューションとして、パスワードなしの認証を設定することをお勧めします。 これらのタスクを月に数回しか実行しない場合は、sshpass ツールを使用することをお勧めします。 -p オプションを使用してパスワードを入力するだけです。 $ sshpass -p 'ここにパスワードを入力してください' ssh -p 2200 [email protected] ip a 1: lo: mtu 65536 qdisc noqueue 状態 UNKNOWN グループ デフォルト qlen 1 リンク/ループバック 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 スコープ ホスト lo valid_lft 永久 preferred_lft 永久 inet6 ::1/128 スコープホスト valid_lft 永久 preferred_lft 永久 2: eth0: mtu 1500 qdisc pfifo_fast 状態 UP グループ デフォルト qlen 1000 リンク/イーサ 08:00:27:18:90:7f brd ff:ff:ff:ff:ff:ff inet 192.168.1.12/24 brd 192.168.1.255 スコープ グローバル ダイナミック eth0 有効_lft 86145秒 推奨_lft 86145秒 inet6 fe80::a00:27ff:fe18:907f/64 スコープ リンク暫定 dadfailed valid_lft 永久 preferred_lft 永久 要約する 上記は、SSH を介してリモート Linux システムでコマンドを実行するために紹介した方法です。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
>>: MySQL でストアド プロシージャを作成し、データ テーブルに新しいフィールドを追加する方法の分析
この記事では、MySQLのインストールと設定のリモートログインチュートリアルを参考までに紹介します。...
目次JSON は次の 2 つの構造に基づいて構築されます。 2. JSON形式1. オブジェクト2....
MySQL スロー クエリ (正式名称はスロー クエリ ログ) は、MySQL によって提供されるロ...
目的: ステーションAをステーションBのセカンダリディレクトリとして扱うのように: http://w...
この記事の例では、ボタンをクリックすることで画像を切り替えることを実現するJavaScriptの具体...
以前、テーブル結合クエリを書いていたとき、whereとonの違いがわからず、SQLに小さな問題が発生...
JavaScript - 原則シリーズ日常の開発では、既存のプロジェクトを引き継ぐときは常に、まず他...
目次スプレッド演算子を使用してプロパティを渡すのは避けてください関数パラメータをオブジェクトにカプセ...
要件: データをリスト形式で表示する場合、表示すべき情報項目が多く、表が横に長くなってしまいます。表...
目次成果を達成する利用可能なプラグインの紹介ニーズに応じてプラグインを選択するプラグインのインストー...
モバイル デバイスでは、フレックス レイアウトが非常に便利です。デバイスの幅に応じてコンテナーの幅を...
Tomcat を学習したばかりのプログラマーにとって、これはよくある間違いです。 1. 環境変数の問...
導入最近、大きな課題をこなす際に、弾幕プレイヤーを作る必要がありました。他の人のソースコードを借りて...
この記事の例では、カウントダウン効果を実現するためのJavaScriptの具体的なコードを参考までに...
カーソルカーソルは、結果セット内のデータを表示または処理するために使用される方法です。カーソルを使用...