先日、ファイルやディレクトリをコピーするときにファイルのアクセス許可をそのまま維持する方法をテストしていました。 複数の場所とシステムに。リモートシステムのファイル権限を確認したい場合は、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を使用してリモートファイルを編集する
これがお役に立てば幸いです。