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

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

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

前言

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

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

免手工輸入密碼

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

使用過程可能會碰到如下需要手工輸入 yes 的繁瑣場景:

$ 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)上述場景,往 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 是一個用于非交互的 ssh 密碼驗證工具,使用前先安裝:

$ yum install sshpass

使用如下:

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

expect

Expect 是用來進行自動化控制和測試的軟件工具。雖然學習成本較高,但是 expect 的功能強大,利用 expect 可以方便的執(zhí)行遠程命令。使用前先安裝:

$ 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í)行本地腳本

對于執(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

對于 expect,首先需要把腳本拷貝到遠程主機,然后在遠程主機執(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í)行,但是我們不希望重復的輸入密碼,我們可以把每條命令修改為如下:

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

例如:

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

對于如 echo, dd 等部分命令,有時會出現(xiàn)如下失敗場景:

$ 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,需要把腳本拷貝到遠程主機,然后在遠程主機采用 sudo 執(zhí)行該腳本,相對 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)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

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

    Linux自定義防誤刪腳本的思路與測試

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

    CentOS下redis自啟動shell腳本

    這篇文章主要介紹了CentOS下redis自啟動shell腳本,使用此腳本可以加入系統(tǒng)服務,實現(xiàn)redis機啟動,并且包含了如啟動、停止、重啟等功能命令,需要的朋友可以參考下
    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腳本實現(xiàn)刪除一年前文件功能分享

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

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

    Shell腳本實現(xiàn)復制文件到多臺服務器的代碼分享

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

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

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

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

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

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

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

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

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

最新評論

浮梁县| 辰溪县| 云浮市| 麟游县| 洱源县| 澄江县| 无为县| 特克斯县| 上栗县| 临颍县| 旬邑县| 洮南市| 玉溪市| 保定市| 东海县| 宁海县| 阳东县| 大新县| 华坪县| 宁明县| 炎陵县| 蒙山县| 岱山县| 忻州市| 游戏| 郑州市| 黎城县| 莲花县| 平湖市| 柳河县| 银川市| 溧阳市| 滦南县| 娄烦县| 五华县| 阜城县| 长顺县| 丽水市| 荔浦县| 隆化县| 滨州市|