成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過 SSH 在遠程 Linux 系統上執行命令

系統 Linux
通過安全的網絡連接在遠程計算機上調用命令或程序。

有一天,我正在測試如何在 ??將文件或目錄復制到多個位置和系統時保持完整的文件權限??。當我想檢查遠程系統上的文件權限時,我必須通過 SSH 登錄它并檢查屬性。從遠程系統多次登錄和注銷的過程讓我有點煩,我想,如果我可以在遠程 Linux 系統上通過 SSH 執行命令就好了。

幸運的是,在瀏覽了 ??ssh?? 命令的手冊頁后,我找到了一個解決辦法。

如果你想知道如何本地運行遠程系統上運行命令或腳本,而不登錄到遠程系統,下面的內容會告訴你如何做。

1、通過 SSH 在遠程 Linux 系統上執行命令

從本地系統通過 SSH 在遠程系統上運行命令或腳本的典型方法是:

$ ssh <username@IP_Address-or-Doman_name> <Command-or-Script>

允許我給你們舉幾個例子:

1.1、通過 SSH 在遠程系統上運行單個命令

假設你想要 ??查找遠程 Linux 系統的內核詳細信息??。為此,只需運行:

$ ssh sk@192.168.225.22 uname -a

這里,

  • ??sk?? 是遠程系統的用戶名,
  • ??192.168.225.22?? 是遠程系統的 IP 地址,
  • ??uname -a?? 是我想在遠程系統上運行的命令。

示例輸出:

通過 SSH 在遠程 Linux 系統上執行命令

看到沒?我并沒有實際登錄到遠程系統,但通過 SSH 在遠程系統上執行了 ??uname?? 命令,并在本地系統的終端上顯示了輸出。

你還可以像下面這樣用引號指定命令。

$ ssh sk@192.168.225.22 "uname -a"

或者,

$ ssh sk@192.168.225.22 'uname -a'

如果你已經 ??更改了 SSH 協議的默認端口??,只需使用 ??-p?? 參數指定它。

$ ssh -p 2200 sk@192.168.225.22 uname -a

1.2、通過 SSH 在遠程主機上執行多個命令

你還可以在遠程主機上運行多個命令,方法是將它們放在引號中。

$ ssh sk@192.168.225.22 "uname -r && lsb_release -a"

或者:

$ ssh sk@192.168.225.22 "uname -r ; lsb_release -a"

上面的命令將顯示我的 Ubuntu 服務器的內核版本和發行版詳細信息。

示例輸出:

在 Linux 上通過 SSH 在遠程主機上運行多個命令

正如一位讀者在下面的評論部分提到的那樣,你應該用引號指定多個命令。如果不使用引號,第一個命令將在遠程系統上執行,第二個命令將僅在本地計算機上執行。整個帶引號的命令將按預期在遠程計算機上運行。

提示: 了解 ??&&?? 和 ??;?? 在命令中的區別:

??&&?? 操作符只有在第一個命令成功時才執行第二個命令。

示例:

  1. sudo apt-get update && sudo apt-get upgrade

在上述示例中,如果第一個命令成功,才會執行 ??sudo apt-get upgrade??。否則,它將不會運行。

??;?? 操作符會執行第二個命令,無論第一個命令是成功還是失敗。

示例:

  1. sudo apt-get update ; sudo apt-get upgrade

在上述示例中,即使第一個命令失敗,??sudo apt-get upgrade?? 也會執行。

1.3、通過 SSH 在遠程機器上調用有 sudo 權限的命令

有些命令需要 ??sudo?? 權限才能運行。例如,以下命令將在我的遠程系統上安裝 ??apache2??。

$ ssh -t sk@192.168.225.22 sudo apt install apache2

示例輸出:

通過 SSH 在遠程機器上運行有 Sudo 權限的命令

注意到了嗎?我在上面的命令中使用了 ??-t?? 標志,我們需要使用它來強制進行偽終端分配。它用于在遠程機器上執行任意基于屏幕的程序,這非常有用。例如,在實現菜單服務時。

另外,我輸入了兩次密碼。第一次是遠程用戶的密碼,以便從本地系統通過 SSH 訪問遠程系統,第二次是為了向遠程用戶賦予 sudo 權限,以便安裝應用程序(在本例中為 apache2)。

讓我們用以下命令檢查 Apache 服務是否正在運行:

$ ssh -t sk@192.168.225.22 sudo systemctl status apache2sk@192.168.225.22's password: [sudo] password for sk: ● apache2.service - The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)Drop-In: /lib/systemd/system/apache2.service.d└─apache2-systemd.confActive: active (running) since Thu 2019-12-19 11:08:03 UTC; 52s agoMain 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 startDec 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:fDec 19 11:08:03 ubuntuserver systemd[1]: Started The Apache HTTP Server.

同樣的,我們可以通過 SSH 在本地系統上運行遠程系統上的任何命令或腳本。

1.4、通過 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 sk@192.168.225.22 'bash -s' < system_information.sh

示例輸出:

sk@192.168.225.22's password: /etc/debian_version /etc/lsb-release /etc/os-releasebuster/sidDISTRIB_ID=UbuntuDISTRIB_RELEASE=18.04DISTRIB_CODENAME=bionicDISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"NAME="Ubuntu"VERSION="18.04.2 LTS (Bionic Beaver)"ID=ubuntuID_LIKE=debianPRETTY_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=bionicUBUNTU_CODENAME=bionic

如果你沒有在上面的命令中指定 ??bash -s??,你將獲得遠程系統的詳細信息,但偽終端不會被分配。

1.5、將遠程主機的命令輸出保存到本地主機

如果你希望與支持團隊或同事共享遠程系統上運行的命令輸出,那么這非常有用。

以下命令將通過 SSH 在遠程系統運行 ??du -ah??,并將輸出保存在本地系統的 ??diskusage.txt?? 文件中。

$ ssh sk@192.168.225.22 du -ah > diskusage.txt

然后,你可以通過使用 ??cat?? 命令或文本編輯器查看 ??diskusage.txt?? 文件來分析磁盤使用細節。

$ cat diskusage.txt 4.0K ./.profile4.0K ./.gnupg/private-keys-v1.d8.0K ./.gnupg76K ./data/image.jpg128K ./data/file.pdf20K ./data/text.docx5.9M ./data/audio.mp36.1M ./data0 ./.sudo_as_admin_successful4.0K ./pacman?inline=false4.0K ./.bash_logout4.0K ./.wget-hsts4.0K ./.bash_history0 ./.cache/motd.legal-displayed4.0K ./.cache4.0K ./deb-pacman_1.0-0.deb4.0K ./.bashrc6.2M .

1.6、配置 SSH 密鑰認證,避免輸入密碼

如果你經常在遠程系統上運行命令,你可能需要配置基于 SSH 密鑰的身份驗證,以便每次跳過密碼輸入。更多細節可以在以下鏈接中找到。

??Linux 系統下如何配置 SSH 密鑰認證??

配置了基于 SSH 密鑰的認證后,我們可以通過 SSH 在遠程機器上執行命令,從而不需要輸入密碼:

$ ssh sk@192.168.225.22 sudo apt update

2、通過 sshpass 在遠程機器上運行命令

如果你不想配置基于 SSH 密鑰的身份驗證,你可以使用 ??sshpass?? 實用程序。

2.1、什么是 sshpass?

??sshpass?? 是為使用鍵盤交互密碼身份驗證模式運行 ssh 而設計的,但它以非交互的方式。簡單來說,??sshpass?? 提供了非交互式的方式來驗證 SSH 會話。

SSH 使用直接 TTY 訪問來確保密碼確實是由交互式鍵盤用戶發出的。??sshpass?? 在一個專用 tty 中運行 SSH,讓它誤以為從交互用戶那里獲得了密碼。

2.2、在 Linux 中安裝 sshpass

在許多 Linux 發行版的默認倉庫中都有 ??sshpass?? 實用程序。例如,在 Debian、Ubuntu 及其衍生版本中,你可以使用下面的命令來安裝 ??sshpass??:

$ sudo apt install sshpass

2.3、通過 SSH 和 sshpass 在遠程機器上執行命令

??sshpass?? 可以通過參數接受密碼,或者通過環境變量讀取密碼,也可以從文本文件中讀取密碼。

警告: 所有這些方法都是 高度不安全的。所有系統用戶都可以通過 ??ps?? 命令看到命令中的密碼。不建議在生產中使用這些方法。最好使用基于密鑰的身份驗證。

讓我們看看每種方法的示例。

將密碼作為參數提供

將密碼作為參數提供,使用 ??-p?? 選項,如下所示:

$ sshpass -p <remote-password> ssh remoteuser@ip-address <command-to-execute>

示例輸出:

$ sshpass -p ubuntu ssh ostechnix@192.168.1.30 uname -a

其中,

  • ??-p ubuntu?? - 提供遠程系統的密碼。
  • ??ostechnix@192.168.1.30?? - 遠程系統用戶名和地址。
  • ??uname -a?? - 要在遠程計算機上執行的命令。

示例輸出:

Linux Ubuntu22CT 5.15.60-1-pve #1 SMP PVE 5.15.60-1 (Mon, 19 Sep 2022 17:53:17 +0200) x86_64 x86_64 x86_64 GNU/Linux
密碼作為環境變量提供

在這個方法中,我們聲明一個名為 ??SSHPASS?? 的環境變量,用遠程環境的密碼作為其值。然后我們使用 ??-e?? 標志,如下所示:

$ SSHPASS=ubuntu sshpass -e ssh ostechnix@192.168.1.30 uname -a
從文本文件中讀取密碼

使用 ??echo?? 命令在文本文件中追加密碼:

$ echo "ubuntu" > mypassword.txt

現在,將密碼文件傳遞給帶有 ??-f?? 標志的 ??sshpass??,如下所示:

$ sshpass -f mypassword.txt ssh ostechnix@192.168.1.30 uname -a

通過 SSH 和 sshpass 在遠程機器上執行命令

總結

在本教程中,我們學習了一些通過安全的網絡連接在遠程計算機上調用命令或程序的方法。在所有的方法中,??sshpass?? 方法是最不安全的,建議用戶避免在生產系統中使用它。

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2019-10-09 16:50:48

SSHLinux遠程系統

2012-06-01 09:44:26

Python

2018-01-18 10:57:48

Linux服務器命令

2021-03-22 16:45:58

服務器命令

2019-08-30 07:24:16

2017-12-11 09:34:40

Linux啟動或重啟命令與腳本

2022-03-14 09:26:32

LinuxUbuntu

2024-01-26 07:58:09

2019-04-25 09:52:38

SSHLinux服務器

2020-09-21 05:53:28

Linux命令&

2009-12-29 14:36:29

Ubuntu cron

2011-08-22 16:23:29

2022-03-11 13:28:54

SSHLinux命令

2016-10-13 08:35:00

SSHFSSSHLinux

2011-03-25 09:35:07

2018-01-22 09:12:18

Linuxbashssh

2017-03-10 10:37:16

Linux命令腳本

2022-09-27 10:07:01

要使用 source

2011-03-25 11:21:36

NagiosLinux

2020-04-10 09:56:12

at命令Linux安排任務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品欧美一区二区三区久久久 | 日韩精品视频一区二区三区 | 久草视| 亚洲视频在线看 | 黄色一级在线播放 | 7777在线| 国产一级淫片免费视频 | 欧美色图综合网 | 国产精品视频久久久 | 色综合99 | 久草免费在线视频 | 亚洲欧美综合 | 久久久久国产精品一区二区 | 欧美日韩视频一区二区 | 第一av| 农夫在线精品视频免费观看 | 国产婷婷精品 | 亚洲综合一区二区三区 | 欧美精品一区二区三 | 一级免费看片 | 超碰激情| 精品中文字幕一区二区三区 | 欧美日韩国产精品一区二区 | 日韩在线视频精品 | 久久国产精品一区二区三区 | 亚洲视频一区 | 一区二区欧美在线 | www.青娱乐| 精品欧美一区二区在线观看欧美熟 | 国产精品99久久久久久宅男 | 男人的天堂久久 | 在线亚洲免费视频 | 日韩电影a| 国产欧美久久一区二区三区 | 黄视频免费在线 | 成人精品久久日伦片大全免费 | 久久久亚洲 | a级毛片毛片免费观看久潮喷 | 我要看黄色录像一级片 | 在线观看三级av | 亚洲久久|