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

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

先日、ファイルやディレクトリをコピーするときにファイルのアクセス許可をそのまま維持する方法をテストしていました。 複数の場所とシステムに。リモートシステムのファイル権限を確認したい場合は、SSH経由でそのシステムにログインし、属性を確認する必要がありました。リモートシステムから何度もログインおよびログアウトするプロセスは、私にとって少し面倒でした。 SSH経由でリモートLinuxシステムでコマンドを実行できればもっと良いと思いました。

幸い、sshのマニュアルページを調べた後、回避策を見つけました。 指図。リモートシステムにログインせずに、ローカルシステム自体からリモートシステムでコマンドまたはスクリプトを実行する方法を知りたい場合は、次の方法で実行できます。

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

ローカルシステムからSSH経由でリモートシステム上でコマンドまたはスクリプトを実行する一般的な方法は次のとおりです。

$ ssh <[email protected]_Address-or-Doman_name> <Command-or-Script>

いくつか例を挙げさせてください。

SSH経由でリモートシステム上で単一のコマンドを実行する

カーネルの詳細を検索したいとします。 リモートLinuxシステムの。これを行うには、単純に次のコマンドを実行します:

$ ssh [email protected] uname -a

ここで

  • sk リモートシステムのユーザー名です
  • 192.168.225.22 リモートシステムのIPアドレスです。
  • そして"uname -a" ローカルシステムからリモートシステムで実行したいコマンドです。

出力例:

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

見る?実際にリモートシステムにログインしていませんが、unameを実行しました SSH経由でリモートシステムのコマンドを実行し、ローカルシステムのターミナルに出力を表示しました。

以下のように引用符でコマンドを指定することもできます。

$ ssh [email protected] "uname -a"

または、

$ ssh [email protected] 'uname -a'

SSHプロトコルのデフォルトポートを変更した場合 -pを使用して言及するだけです 以下のようなパラメータ。

$ ssh -p 2200 [email protected] uname -a

SSH経由でリモートシステム上で複数のコマンドを実行する

以下のように引用符で囲んで指定することにより、リモートで複数のコマンドを実行することもできます。

$ ssh [email protected] "uname -r && lsb_release -a"

または、

$ ssh [email protected] "uname -r ; lsb_release -a"

上記のコマンドは、Ubuntuサーバーのカーネルバージョンとディストリビューションの詳細を表示します。

出力例:

Linux上のSSHを介してリモートシステムで複数のコマンドを実行する

以下のコメントセクションで言及されている読者の1人として、引用符で複数のコマンドを指定する必要があります。引用符を使用しない場合、最初のコマンドはリモートシステムで実行され、2番目のコマンドはローカルマシンでのみ評価されます。引用符で囲まれたコマンド全体は、意図したとおりにリモートで処理されます。

注: “&&”の違いを知る および“;” コマンド間の演算子:

“&&” オペレーターは、最初のコマンドが成功した場合にのみ2番目のコマンドを実行します。

例:

sudo apt-get update && sudo apt-get upgrade

上記の場合、2番目のコマンド(sudo apt-get upgrade )最初のコマンドが成功した場合に実行されます。そうしないと、実行されません。

“;” 最初のコマンドが成功または失敗した場合でも、オペレーターは2番目のコマンドを実行します。

例:

sudo apt-get update ; sudo apt-get upgrade

上記の場合、2番目のコマンド(sudo apt-get upgrade )最初のコマンドが失敗しても実行されます。

SSH経由でリモートシステム上で「sudo」権限でコマンドを実行する

一部のコマンドには"sudo"が必要です 実行する特権。たとえば、次のコマンドは Vimをインストールします リモートシステムで。

$ ssh -t [email protected] sudo apt install apache2

出力例:

SSH経由でリモートシステム上で「sudo」権限でコマンドを実行する

気づきましたか? -tを使用しました 上記のコマンドのフラグ。この-tについて言及する必要があります 疑似端末の割り当てを強制するフラグ。これは、リモートマシン上で任意の画面ベースのプログラムを実行するために使用できます。これは非常に便利です。メニューサービスを実装する場合。

また、パスワードを2回入力しました 。ローカルシステムからSSH経由でリモートシステムにアクセスするためにリモートユーザーのパスワードを初めて入力したとき、リモートシステムにアプリケーション(この場合はapache2)をインストールするためのsudo権限をリモートユーザーに与えるために2番目のパスワードが必要です。

コマンドを使用してApacheサービスが実行されているかどうかを確認しましょう:

$ ssh -t [email protected] sudo systemctl status apache2
[email protected]'s password: 
[sudo] password for sk: 
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Thu 2019-12-19 11:08:03 UTC; 52s ago
Main PID: 5251 (apache2)
Tasks: 55 (limit: 2318)
CGroup: /system.slice/apache2.service
├─5251 /usr/sbin/apache2 -k start
├─5253 /usr/sbin/apache2 -k start
└─5254 /usr/sbin/apache2 -k start

Dec 19 11:08:03 ubuntuserver systemd[1]: Starting The Apache HTTP Server...
Dec 19 11:08:03 ubuntuserver apachectl[5227]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 2409:4072:51f:a1b6:a00:27ff:f
Dec 19 11:08:03 ubuntuserver systemd[1]: Started The Apache HTTP Server.
を使用して、サーバーの完全修飾ドメイン名を確実に判別できません。

同様に、ローカルシステムからSSH経由でリモートシステム上で任意のコマンドまたはスクリプトを実行できます。

SSH経由でリモートシステム上でローカルスクリプトを実行する

ローカルシステムで簡単なスクリプトを作成して、リモートシステムの配布名、パッケージ管理、ベースの詳細などに関する利用可能なすべての情報を表示しましょう。

$ vi system_information.sh

次の行を追加します:

#!/bin/bash
#Name: Display System Details
#Owner: OSTechNIx
#----------------------------
echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel*

ESCを押します キーを押して:wqと入力します ファイルを保存して終了します。

次に、次のコマンドを使用して、SSH経由でリモートシステムでこのスクリプトを実行します。

$ ssh [email protected] 'bash -s' < system_information.sh

出力例:

[email protected]'s password: 
/etc/debian_version /etc/lsb-release /etc/os-release
buster/sid
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

'bash -s'を指定しない場合 上記のコマンドでは、リモートシステムの詳細を取得できますが、擬似端末は割り当てられません。

リモートシステムからの出力をローカルシステムに保存する

これは、SSH経由でリモートシステムで実行するコマンドの出力をサポートチームまたは同僚と共有する場合に役立ちます。

次のコマンドは"du -ah"を実行します SSH経由でリモートシステムに保存し、出力を diskusage.txtに保存します ローカルシステムのファイル。

$ ssh [email protected] du -ah > diskusage.txt

次に、diskusage.txtを表示して、ディスク使用量の詳細を分析できます。 catを使用したファイル コマンドまたはテキストビューア。

$ cat diskusage.txt 
4.0K ./.profile
4.0K ./.gnupg/private-keys-v1.d
8.0K ./.gnupg
76K ./data/image.jpg
128K ./data/file.pdf
20K ./data/text.docx
5.9M ./data/audio.mp3
6.1M ./data
0 ./.sudo_as_admin_successful
4.0K ./pacman?inline=false
4.0K ./.bash_logout
4.0K ./.wget-hsts
4.0K ./.bash_history
0 ./.cache/motd.legal-displayed
4.0K ./.cache
4.0K ./deb-pacman_1.0-0.deb
4.0K ./.bashrc
6.2M .

パスワードの入力を回避するためにSSHキーベースの認証を構成する

リモートシステムでコマンドを頻繁に実行する場合は、毎回パスワードの入力をスキップするようにSSHキーベースの認証を構成することをお勧めします。詳細については、次のリンクをご覧ください。

  • LinuxでSSHキーベースの認証を構成する方法

推奨される読み物:

  • Rsyncを使用してSSH経由で部分的に転送されたファイルを再開する方法
  • 複数のリモートシステムで単一のコマンドを一度に実行する方法
  • DSH –一度に複数のホストでLinuxコマンドを実行する
  • LinuxでSSHエイリアスを作成する方法
  • SSLH –HTTPSとSSHで同じポートを共有する
  • ScanSSH –高速SSHサーバーとオープンプロキシスキャナー
  • Linuxで特定のディレクトリにSSHで接続する方法
  • Linuxで特定のユーザーまたはグループへのSSHアクセスを許可または拒否する
  • LinuxでSSHセッションが切断されないようにする方法
  • FreeBSDでSSHを有効にする方法
  • Vimのヒント-LinuxでVimを使用してリモートファイルを編集する

これがお役に立てば幸いです。


Linux
  1. ターミネーターを使用して複数のSSHセッションにコマンドを送信する

  2. Linuxバルク/リモート管理?

  3. 11 Linux で便利な「ssh」および「scp」コマンド

  1. Linuxはコマンドをリモートで実行します

  2. リモート マシンに ssh するためのシェル スクリプトを記述し、コマンドを実行する

  3. PHP を介してリモート マシンでコマンドを実行する

  1. LinuxでSSHキーを生成するコマンド

  2. Ssh –リモートコマンドを実行し、Ssh接続から完全に切り離しますか?

  3. Ubuntu / Linux で ssh を介して *on* リモート マシンでサウンドを再生する