自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過 SSH 在遠(yuǎn)程 Linux 系統(tǒng)上執(zhí)行命令

系統(tǒng) Linux
通過安全的網(wǎng)絡(luò)連接在遠(yuǎn)程計(jì)算機(jī)上調(diào)用命令或程序。

有一天,我正在測(cè)試如何在 ??將文件或目錄復(fù)制到多個(gè)位置和系統(tǒng)時(shí)保持完整的文件權(quán)限??。當(dāng)我想檢查遠(yuǎn)程系統(tǒng)上的文件權(quán)限時(shí),我必須通過 SSH 登錄它并檢查屬性。從遠(yuǎn)程系統(tǒng)多次登錄和注銷的過程讓我有點(diǎn)煩,我想,如果我可以在遠(yuǎn)程 Linux 系統(tǒng)上通過 SSH 執(zhí)行命令就好了。

幸運(yùn)的是,在瀏覽了 ??ssh?? 命令的手冊(cè)頁(yè)后,我找到了一個(gè)解決辦法。

如果你想知道如何本地運(yùn)行遠(yuǎn)程系統(tǒng)上運(yùn)行命令或腳本,而不登錄到遠(yuǎn)程系統(tǒng),下面的內(nèi)容會(huì)告訴你如何做。

1、通過 SSH 在遠(yuǎn)程 Linux 系統(tǒng)上執(zhí)行命令

從本地系統(tǒng)通過 SSH 在遠(yuǎn)程系統(tǒng)上運(yùn)行命令或腳本的典型方法是:

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

允許我給你們舉幾個(gè)例子:

1.1、通過 SSH 在遠(yuǎn)程系統(tǒng)上運(yùn)行單個(gè)命令

假設(shè)你想要 ??查找遠(yuǎn)程 Linux 系統(tǒng)的內(nèi)核詳細(xì)信息??。為此,只需運(yùn)行:

$ ssh sk@192.168.225.22 uname -a

這里,

  • ??sk?? 是遠(yuǎn)程系統(tǒng)的用戶名,
  • ??192.168.225.22?? 是遠(yuǎn)程系統(tǒng)的 IP 地址,
  • ??uname -a?? 是我想在遠(yuǎn)程系統(tǒng)上運(yùn)行的命令。

示例輸出:

通過 SSH 在遠(yuǎn)程 Linux 系統(tǒng)上執(zhí)行命令

看到?jīng)]?我并沒有實(shí)際登錄到遠(yuǎn)程系統(tǒng),但通過 SSH 在遠(yuǎn)程系統(tǒng)上執(zhí)行了 ??uname?? 命令,并在本地系統(tǒng)的終端上顯示了輸出。

你還可以像下面這樣用引號(hào)指定命令。

$ ssh sk@192.168.225.22 "uname -a"

或者,

$ ssh sk@192.168.225.22 'uname -a'

如果你已經(jīng) ??更改了 SSH 協(xié)議的默認(rèn)端口??,只需使用 ??-p?? 參數(shù)指定它。

$ ssh -p 2200 sk@192.168.225.22 uname -a

1.2、通過 SSH 在遠(yuǎn)程主機(jī)上執(zhí)行多個(gè)命令

你還可以在遠(yuǎn)程主機(jī)上運(yùn)行多個(gè)命令,方法是將它們放在引號(hào)中。

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

或者:

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

上面的命令將顯示我的 Ubuntu 服務(wù)器的內(nèi)核版本和發(fā)行版詳細(xì)信息。

示例輸出:

在 Linux 上通過 SSH 在遠(yuǎn)程主機(jī)上運(yùn)行多個(gè)命令

正如一位讀者在下面的評(píng)論部分提到的那樣,你應(yīng)該用引號(hào)指定多個(gè)命令。如果不使用引號(hào),第一個(gè)命令將在遠(yuǎn)程系統(tǒng)上執(zhí)行,第二個(gè)命令將僅在本地計(jì)算機(jī)上執(zhí)行。整個(gè)帶引號(hào)的命令將按預(yù)期在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行。

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

??&&?? 操作符只有在第一個(gè)命令成功時(shí)才執(zhí)行第二個(gè)命令。

示例:

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

在上述示例中,如果第一個(gè)命令成功,才會(huì)執(zhí)行 ??sudo apt-get upgrade??。否則,它將不會(huì)運(yùn)行。

??;?? 操作符會(huì)執(zhí)行第二個(gè)命令,無論第一個(gè)命令是成功還是失敗。

示例:

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

在上述示例中,即使第一個(gè)命令失敗,??sudo apt-get upgrade?? 也會(huì)執(zhí)行。

1.3、通過 SSH 在遠(yuǎn)程機(jī)器上調(diào)用有 sudo 權(quán)限的命令

有些命令需要 ??sudo?? 權(quán)限才能運(yùn)行。例如,以下命令將在我的遠(yuǎn)程系統(tǒng)上安裝 ??apache2??。

$ ssh -t sk@192.168.225.22 sudo apt install apache2

示例輸出:

通過 SSH 在遠(yuǎn)程機(jī)器上運(yùn)行有 Sudo 權(quán)限的命令

注意到了嗎?我在上面的命令中使用了 ??-t?? 標(biāo)志,我們需要使用它來強(qiáng)制進(jìn)行偽終端分配。它用于在遠(yuǎn)程機(jī)器上執(zhí)行任意基于屏幕的程序,這非常有用。例如,在實(shí)現(xiàn)菜單服務(wù)時(shí)。

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

讓我們用以下命令檢查 Apache 服務(wù)是否正在運(yùn)行:

$ 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 在本地系統(tǒng)上運(yùn)行遠(yuǎn)程系統(tǒng)上的任何命令或腳本。

1.4、通過 SSH 在遠(yuǎn)程系統(tǒng)上運(yùn)行本地腳本

讓我們?cè)诒镜叵到y(tǒng)上創(chuàng)建一個(gè)簡(jiǎn)單的腳本來顯示關(guān)于遠(yuǎn)程系統(tǒng)的發(fā)行版名稱、包管理和基本細(xì)節(jié)等。

$ vi system_information.sh

添加以下行:

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

按下 ??ESC?? 鍵,輸入 ??:wq?? 保存退出。

現(xiàn)在,通過 SSH 命令在遠(yuǎn)程系統(tǒng)上運(yùn)行這個(gè)腳本:

$ 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??,你將獲得遠(yuǎn)程系統(tǒng)的詳細(xì)信息,但偽終端不會(huì)被分配。

1.5、將遠(yuǎn)程主機(jī)的命令輸出保存到本地主機(jī)

如果你希望與支持團(tuán)隊(duì)或同事共享遠(yuǎn)程系統(tǒng)上運(yùn)行的命令輸出,那么這非常有用。

以下命令將通過 SSH 在遠(yuǎn)程系統(tǒng)運(yùn)行 ??du -ah??,并將輸出保存在本地系統(tǒng)的 ??diskusage.txt?? 文件中。

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

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

$ 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 密鑰認(rèn)證,避免輸入密碼

如果你經(jīng)常在遠(yuǎn)程系統(tǒng)上運(yùn)行命令,你可能需要配置基于 SSH 密鑰的身份驗(yàn)證,以便每次跳過密碼輸入。更多細(xì)節(jié)可以在以下鏈接中找到。

??Linux 系統(tǒng)下如何配置 SSH 密鑰認(rèn)證??

配置了基于 SSH 密鑰的認(rèn)證后,我們可以通過 SSH 在遠(yuǎn)程機(jī)器上執(zhí)行命令,從而不需要輸入密碼:

$ ssh sk@192.168.225.22 sudo apt update

2、通過 sshpass 在遠(yuǎn)程機(jī)器上運(yùn)行命令

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

2.1、什么是 sshpass?

??sshpass?? 是為使用鍵盤交互密碼身份驗(yàn)證模式運(yùn)行 ssh 而設(shè)計(jì)的,但它以非交互的方式。簡(jiǎn)單來說,??sshpass?? 提供了非交互式的方式來驗(yàn)證 SSH 會(huì)話。

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

2.2、在 Linux 中安裝 sshpass

在許多 Linux 發(fā)行版的默認(rèn)倉(cāng)庫(kù)中都有 ??sshpass?? 實(shí)用程序。例如,在 Debian、Ubuntu 及其衍生版本中,你可以使用下面的命令來安裝 ??sshpass??:

$ sudo apt install sshpass

2.3、通過 SSH 和 sshpass 在遠(yuǎn)程機(jī)器上執(zhí)行命令

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

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

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

將密碼作為參數(shù)提供

將密碼作為參數(shù)提供,使用 ??-p?? 選項(xiàng),如下所示:

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

示例輸出:

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

其中,

  • ??-p ubuntu?? - 提供遠(yuǎn)程系統(tǒng)的密碼。
  • ??ostechnix@192.168.1.30?? - 遠(yuǎn)程系統(tǒng)用戶名和地址。
  • ??uname -a?? - 要在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行的命令。

示例輸出:

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
密碼作為環(huán)境變量提供

在這個(gè)方法中,我們聲明一個(gè)名為 ??SSHPASS?? 的環(huán)境變量,用遠(yuǎn)程環(huán)境的密碼作為其值。然后我們使用 ??-e?? 標(biāo)志,如下所示:

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

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

$ echo "ubuntu" > mypassword.txt

現(xiàn)在,將密碼文件傳遞給帶有 ??-f?? 標(biāo)志的 ??sshpass??,如下所示:

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

通過 SSH 和 sshpass 在遠(yuǎn)程機(jī)器上執(zhí)行命令

總結(jié)

在本教程中,我們學(xué)習(xí)了一些通過安全的網(wǎng)絡(luò)連接在遠(yuǎn)程計(jì)算機(jī)上調(diào)用命令或程序的方法。在所有的方法中,??sshpass?? 方法是最不安全的,建議用戶避免在生產(chǎn)系統(tǒng)中使用它。

責(zé)任編輯:龐桂玉 來源: Linux中國(guó)
相關(guān)推薦

2019-10-09 16:50:48

SSHLinux遠(yuǎn)程系統(tǒng)

2012-06-01 09:44:26

Python

2018-01-18 10:57:48

Linux服務(wù)器命令

2019-08-30 07:24:16

2021-03-22 16:45:58

服務(wù)器命令

2017-12-11 09:34:40

Linux啟動(dòng)或重啟命令與腳本

2024-01-26 07:58:09

2022-03-14 09:26:32

LinuxUbuntu

2019-04-25 09:52:38

SSHLinux服務(wù)器

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

2017-03-10 10:37:16

Linux命令腳本

2022-09-27 10:07:01

要使用 source

2018-01-22 09:12:18

Linuxbashssh

2020-04-10 09:56:12

at命令Linux安排任務(wù)

2021-09-28 14:15:23

Ubuntu 20.0LinuxSSH
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)