最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于SSH 遠(yuǎn)程執(zhí)行命令你要知道的二三事

 更新時(shí)間:2017年07月25日 10:42:44   作者:koala bear  
SSH 是 Linux 下進(jìn)行遠(yuǎn)程連接的基本工具,但是如果僅僅用它來登錄那可是太浪費(fèi)啦!SSH 命令可是完成遠(yuǎn)程操作的神器啊,下面這篇文章主要給大家介紹了關(guān)于SSH 遠(yuǎn)程執(zhí)行命令的一些相關(guān)資料,需要的朋友可以參考下。

前言

相信大家在工作的時(shí)侯,可能會(huì)遇到要利用 ssh 在本地執(zhí)行遠(yuǎn)程機(jī)器的命令可以便捷地處理某些重復(fù)工作,我們希望做到:

  • 免手工輸入密碼
  • 支持執(zhí)行多個(gè)命令,執(zhí)行 shell 腳本
  • 支持執(zhí)行 sudo 的命令

免手工輸入密碼

我們可以使用 ssh 互信,sshpass 和 expect 等工具來避免手工輸密碼。

使用過程可能會(huì)碰到如下需要手工輸入 yes 的繁瑣場(chǎng)景:

$ ssh username@hostname
The authenticity of host ... can't be established.
ECDSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)?

為了避免出現(xiàn)上述場(chǎng)景,往 ssh 命令添加如下參數(shù):

$ ssh -o "StrictHostKeyChecking no" username@password

SSH 互信

SSH 互信的配置非常簡單,首先生成 ssh key:

$ ssh-keygen

把 public key 拷貝到信任方中:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@hostname

之后免密執(zhí)行命令:

$ ssh -o "StrictHostKeyChecking no" username@password cmd

sshpass

sshpass 是一個(gè)用于非交互的 ssh 密碼驗(yàn)證工具,使用前先安裝:

$ yum install sshpass

使用如下:

$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@hostname cmd

expect

Expect 是用來進(jìn)行自動(dòng)化控制和測(cè)試的軟件工具。雖然學(xué)習(xí)成本較高,但是 expect 的功能強(qiáng)大,利用 expect 可以方便的執(zhí)行遠(yuǎn)程命令。使用前先安裝:

$ yum install expect

例如:

#!/usr/bin/expect

spawn ssh -o "StrictHostKeyChecking no" username@hostname
expect "*assword*"
send "password\n"
expect "*$*"
send "command\n"
expect "*$*"
send "exit\n"
expect eof

Expect 不僅支持 ssh,還支持 scp, ftp 等工具。

支持多命令和腳本

執(zhí)行多條命令

sshpass 和 expect 在支持多條命令上非常類似,只需用 && 連接命令即可:

# ssh trust
$ ssh -o "StrictHostKeyChecking no" username@password "cmd1 && cmd2"

例如:

# sshpass
$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password "ls -a && mkdir test"

# expect
......
expect "*$*"
send "ls -a && mkdir test\n"
......

執(zhí)行本地腳本

對(duì)于執(zhí)行本地腳本,ssh 和 sshpass 的用法類似。

# ssh trust
$ ssh -o "StrictHostKeyChecking no" username@password bash -s < shell_script.sh

# sshpass
$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password bash -s < shell_script.sh

對(duì)于 expect,首先需要把腳本拷貝到遠(yuǎn)程主機(jī),然后在遠(yuǎn)程主機(jī)執(zhí)行該腳本,步驟如下:

...
# Copy script to remote host
spawn scp -o "StrictHostKeyChecking no" shell_script.sh username@hostname:~/
expect "*assword*"
send "password\n"
expect "*100%*"
expect eof

# Execute the shell script at remote host
spawn ssh -o "StrictHostKeyChecking no" username@hostname
expect "*assword*"
send "password\n"
expect "*$*"
send "sh shell_script.sh\n"
......

支持執(zhí)行 sudo 命令

有些命令需要 sudo 權(quán)限才能執(zhí)行,但是我們不希望重復(fù)的輸入密碼,我們可以把每條命令修改為如下:

cmd ---> 'echo password | sudo -S cmd'

例如:

$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password "echo password | sudo -S mkdir /newdir"

對(duì)于如 echo, dd 等部分命令,有時(shí)會(huì)出現(xiàn)如下失敗場(chǎng)景:

$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password 'echo password | sudo -S echo hello > /newdir/newfile'
bash: /newdir/newfile: 權(quán)限不夠

解決辦法如下:

cmd ---> 'echo password | sudo -S sh -c "cmd"'

# For example
$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password 'echo WSfdl097018= | sudo -S sh -c "echo hello > /newdir/newfile"'

如果采用 expect,需要把腳本拷貝到遠(yuǎn)程主機(jī),然后在遠(yuǎn)程主機(jī)采用 sudo 執(zhí)行該腳本,相對(duì) sshpass 更簡便和健壯:

...
# Copy script to remote host
spawn scp -o "StrictHostKeyChecking no" shell_script.sh username@hostname:~/
expect "*assword*"
send "password\n"
expect "*100%*"
expect eof

# Execute the shell script at remote host
spawn ssh -o "StrictHostKeyChecking no" username@hostname
expect "*assword*"
send "password\n"
expect "*$*"
send "sudo sh shell_script.sh\n"
expect "*assword*"
send "password\n"
......

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Linux自定義防誤刪腳本的思路與測(cè)試

    Linux自定義防誤刪腳本的思路與測(cè)試

    相信很多朋友都遇到過在linux下誤刪除文件的時(shí)候,此刻的心中仿佛有無數(shù)的羊駝在奔騰,下面這篇文章主要給大家介紹了關(guān)于Linux自定義防誤刪腳本的思路與測(cè)試的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • CentOS下redis自啟動(dòng)shell腳本

    CentOS下redis自啟動(dòng)shell腳本

    這篇文章主要介紹了CentOS下redis自啟動(dòng)shell腳本,使用此腳本可以加入系統(tǒng)服務(wù),實(shí)現(xiàn)redis機(jī)啟動(dòng),并且包含了如啟動(dòng)、停止、重啟等功能命令,需要的朋友可以參考下
    2014-08-08
  • 詳解git無法pull倉庫refusing to merge unrelated histories

    詳解git無法pull倉庫refusing to merge unrelated histories

    這篇文章主要介紹了詳解git無法pull倉庫refusing to merge unrelated histories的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Shell在循環(huán)中使用i++

    Shell在循環(huán)中使用i++

    在 Shell 腳本中,可以使用 (( i++ )) 或者 let "i++" 來增加變量 i 的值,這用于在循環(huán)中自增變量 i,本文介紹Shell在循環(huán)中使用i++的示例,感興趣的朋友一起看看吧
    2023-12-12
  • Shell腳本實(shí)現(xiàn)刪除一年前文件功能分享

    Shell腳本實(shí)現(xiàn)刪除一年前文件功能分享

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)刪除一年前文件功能分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-12-12
  • Shell腳本實(shí)現(xiàn)復(fù)制文件到多臺(tái)服務(wù)器的代碼分享

    Shell腳本實(shí)現(xiàn)復(fù)制文件到多臺(tái)服務(wù)器的代碼分享

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)復(fù)制文件到多臺(tái)服務(wù)器的代碼分享,用在多機(jī)集群環(huán)境中非常方便,需要的朋友可以參考下
    2014-09-09
  • Shell編程控制結(jié)構(gòu)的基本使用

    Shell編程控制結(jié)構(gòu)的基本使用

    本文主要介紹了Shell編程控制結(jié)構(gòu)的基本使用,主要介紹了幾種常用的控制語句,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-11-11
  • Linux輸出內(nèi)容到指定文件的解決方案

    Linux輸出內(nèi)容到指定文件的解決方案

    這篇文章主要介紹了Linux輸出內(nèi)容到指定文件的解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Linux?du命令實(shí)現(xiàn)根據(jù)文件或者文件夾大小排序輸出

    Linux?du命令實(shí)現(xiàn)根據(jù)文件或者文件夾大小排序輸出

    Linux是一個(gè)強(qiáng)大的操作系統(tǒng),廣泛用于服務(wù)器和個(gè)人計(jì)算機(jī),本文主要來和大家聊聊如何利用du命令實(shí)現(xiàn)根據(jù)文件或者文件夾大小排序輸出,感興趣的可以了解下
    2023-09-09
  • Linux中Shell腳本判斷文件/文件夾是否存在方法

    Linux中Shell腳本判斷文件/文件夾是否存在方法

    很多時(shí)候我們?cè)谧鲞\(yùn)維的時(shí)候,我們需要做一些自動(dòng)化,這時(shí)我們就需要寫一些shell腳本,既然要用到shell腳本,就免不了文件操作,這篇文章主要給大家介紹了關(guān)于Linux中Shell腳本判斷文件/文件夾是否存在的相關(guān)資料,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

钟山县| 东平县| 射洪县| 东丽区| 铁岭县| 博客| 城固县| 陕西省| 汉中市| 普格县| 汤阴县| 东丰县| 且末县| 尉犁县| 东兴市| 苏尼特右旗| 沅江市| 穆棱市| 合水县| 武定县| 乐安县| 安西县| 邹平县| 宁武县| 水城县| 阿巴嘎旗| 大方县| 伊春市| 上思县| 丰镇市| 绥江县| 夏河县| 南昌县| 冕宁县| 清水县| 洛阳市| 叙永县| 读书| 奉新县| 阳朔县| 吉林市|