SSH経由でリモートLinuxシステムでコマンドを実行する方法

SSH経由でリモートLinuxシステムでコマンドを実行する方法

場合によっては、リモート マシンでいくつかのコマンドを実行する必要があることがあります。これが時々行われる操作である場合は、リモート システムにログインしてコマンドを直接実行することで、この目的を達成できます。しかし、毎回これを行うのは面倒です。この場合、この面倒な操作をなくすためのより良い解決策はありますか?

はい、リモート システムにログインしなくても、ローカル システムからこれらの操作を実行できます。これには何か利点がありますか?間違いない。これにより、多くの時間を節約できます。

これはどのように達成されるのでしょうか? 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 ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • 初心者向け Linux コマンドの学習: ssh コマンド (リモート ログイン)
  • LinuxでSSHを使用してコマンドをリモート実行し、データベースをローカルにバッチエクスポートする
  • Linux での sshd サービスとサービス管理コマンドの詳細な説明
  • Linux でパスワードなしでバッチ SSH を実行するための Expect コマンド
  • Linux での ssh のインストールと scp コマンドの使用法の詳細な説明
  • PHPでLinuxコマンドを実行し、SSHサービスを開始する例
  • Linux VPS での一般的な SSH コマンドの概要

<<:  ロンボク実装 JSR-269

>>:  MySQL でストアド プロシージャを作成し、データ テーブルに新しいフィールドを追加する方法の分析

推薦する

Ubuntu 16.04 64 ビット版の VMware Tools のインストールと構成のグラフィック チュートリアル

この記事では、VMware Toolsのインストールと構成に関するグラフィックチュートリアルを参考と...

Chrome をクラッシュさせる CSS コードの行

一般的な CSS コードでは、UI レイアウトや互換性に関して軽微な問題が発生するだけです。しかし、...

JavaScript 非同期プログラミングにおける Promise の初期の使用法の詳細な説明

1. 概要Promise オブジェクトは、ES6 で提案された非同期プログラミングの仕様です。非同期...

JavaScript ES6 分割演算子の理解と応用

目次序文脱構築記号の役割使い方分割割り当ての適用アプリケーションの簡単な紹介JSONデータを抽出する...

Docker+Nginx を使ってシングルページアプリケーションをデプロイする

開発から導入まで自分で行うシングルページアプリケーションを開発する場合、ビルドを実行した後 npm ...

MySQLトランザクションとMySQLログの詳細な説明

取引特性1. アトミック性: トランザクションの開始後、すべての操作が完了するか、まったく実行されな...

CSS3 を使用したテキスト折り紙効果のサンプルコード

序文この記事では主に、CSS3 を使用してテキスト折り紙効果を実現する例を紹介します。これは、参考と...

nginx/apache 静的リソースのクロスドメインアクセスの問題を解決する詳細な説明

1. Apache 静的リソースのクロスドメイン アクセスApache設定ファイルhttpd.con...

Nginx 仮想ホストを構成する 3 つの方法 (ポートベース) の詳細な説明

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...

MySQLの浅いエントリと深いエグジットの原則についての簡単な説明

目次1. ページの概要2. 下限と上限3. ページディレクトリを使用する4. ページの実際の外観4....

CSS スタイルの導入方法とその長所と短所の紹介

CSSを導入する3つの方法1. インラインスタイル利点: 書きやすく、重みがある 欠点: 構造とスタ...

CSS3+HTML5+JSでブロックの縮小・拡大アニメーション効果を実現

最近、あるプロジェクトに取り組んでいたとき、自分のプロジェクトでは CSS3 のアニメーション技術を...

ハイパーリンクを表示して開く方法

<br />インターネット上の無数の情報は基本的に HTML ドキュメントで構成されてお...

Linuxのシグナルメカニズムについての簡単な説明

目次1. シグナルリスト1.1. リアルタイム信号と非リアルタイム信号1.2 信号ステータス1.3 ...

Tomcat の一般的な例外と解決コードの例

弊社のプロジェクトは Java で開発され、ミドルウェアは Tomcat でした。運用中に、Tomc...