1. 程式人生 > >sudo 自動輸入密碼的指令碼 alias別名

sudo 自動輸入密碼的指令碼 alias別名

【alias簡介】
alias 命令用於定義一個命令的簡寫格式,例如,alias lsproc='ls -l /proc',其中定義了一個新的命令lsproc,以後當輸入lsproc的時候,都會執行ls -l proc,顯示proc的目錄內容
為了使alias永久生效,可以將定義寫在 ~/.bashrc 中
vim ~/.bashrc
新增:alias lsproc='ls -l /proc'
編輯完~/.bashrc檔案以後,重啟控制檯,輸入alias<Enter>,即可看到剛才定時的別名,輸入lsproc即可得到結果

注:~表示使用者的/home/usrname目錄;alias的意思是別名

【正文】

之前每次關機都需要遵循以下步驟:
[email protected]:sudo -i #獲取許可權
[sudo]password for x: #提示輸入密碼
[email protected]:shutdown -h now #獲取完許可權,執行關機,個人喜歡用shutdown而不是halt

或者合成一句:
[email protected]:sudo shutdown -h now  
[sudo]password for x:
[email protected]:(關機)

為了方便,我想起了alias,於是編寫了下面的alias別名,看能不能自動應答,做到一鍵關機:

[email protected]:echo 123123|sudo shutdown -h now' #123123 是我的系統密碼;定義halt別名會覆蓋原來的halt,要引用原來系統的halt,只需加一個用\halt即可
[email protected]:halt
[sudo]password for x: #結果仍然出現密碼要求,顯然沒有自動應答

於是網上各種搜,誓要把這個問題解決,過程中包括下面這些命令,但是都不行
alias halt='echo 123123|sudo shutdown -h now' 
alias halt='echo 123123>stdin;sudo -S shutdown -h now' #sudo -S表示從標準stdin,也就是鍵盤輸入


直到後來,千辛萬苦之下,終於解決了這個問題,其中需要用到重定向符號<,>,2>等,[url]http:www.2cto.com/os/201403/284912.html 可以看看重定向相關介紹

【最終解決方法】(以自動應答sudo -i為例,此命令的作用是申請root許可權)
第一步:為了避免直接使用明文密碼,首先定義一個系統環境變數PASS=123123
[email protected]:vim /etc/profile  
#在/etc/profile中新增:
# export PASS=‘123123’
# 儲存,exit
[email protected]:source /etc/profile #使之生效
[email protected]:export #檢視
新建好之後,就可以用${PASS}來引用

第二步:編寫應答指令,這一步是純粹是實驗得出的
新建一個pass檔案,裡面寫入密碼內容 123123,儲存,exit

[email protected]:sudo -S -i<pass #輸入這個命令,會出現以下提示資訊:
[sudo] password for x: stdin: is not a tty #[sudo] password for x: 標準輸入sdin不是一個tty(控制檯終端)(基於下面的理由,你可以不用理會這條資訊)
[email protected]:sudo -i #但其實這時候你已經獲得了許可權,輸入sudo -i就可以獲得許可權,到這一步,其實我們已經完成了大半工作,即本質上已經實現了自動應答,但是還需要進一步優化,做到一步到位
[email protected]: #證明已經獲取了root許可權

優化如下:
避免輸出錯誤提示資訊:
sudo -S 2> /dev/nul # 2>表示stderr的重定向,/dev/null是一個特殊的輸出裝置,它會捨棄一切指向它的輸入

用echo來自動建立檔案
echo ${PASS}>/tmp/pass #${PASS}就是上面的密碼,123123; > /tmp/pass 表示輸出重定向/tmp/pass檔案,/tmp是一個臨時資料夾

用分號(;)來一步完成
echo ${PASS}>/tmp/pass ; sudo -S -i</tmp/pass 2>/dev/null ; sudo -S -i #注意為什麼兩次sudo(第二次在第一次的基礎上真正得到許可權)

用alias簡化命令格式:
alias su='echo ${PASS}>/tmp/pass ; sudo -S -i</tmp/pass 2>/dev/null ; sudo -S -i‘ #新的su替代原來的su,原來的su用\su訪問

最後,加入~/.bashrc使之永久生效
測試以下:
[email protected]:su
[email protected]: #乾淨利落地獲得了系統許可權


【晒晒自動應答命令】
#su,reboot,halt
alias su=' echo ${PASS} > /tmp/pass ; sudo -i -S < /tmp/pass 2> /dev/null ; sudo -i -S'
alias reboot=' echo ${PASS} > /tmp/pass ; sudo -i -S< /tmp/pass 2> /dev/null ; sudo -S reboot'
alias halt=' echo ${PASS} > /tmp/pass ; sudo -i -S< /tmp/pass 2> /dev/null ; sudo -S shutdow -h now'

相關推薦

sudo 自動輸入密碼指令碼 alias別名

【alias簡介】alias 命令用於定義一個命令的簡寫格式,例如,alias lsproc='ls -l /proc',其中定義了一個新的命令lsproc,以後當輸入lsproc的時候,都會執行ls -l proc,顯示proc的目錄內容為了使alias永久生效,可以將

ubuntu執行sh指令碼sudo自動輸入密碼

示例: sudo apt-get update  第一種方法:使用管道(上一個命令的 stdout 接到下一個命令的 stdin): #!/bin/bashecho password | sudo

以一個例子來講ubuntu12.04下指令碼檔案內執行sudo 命令自動輸入密碼

原文連線http://blog.sina.com.cn/s/blog_951ca19b0101be96.html  在上一篇的文章中(發文時間為2012-10-30 16:09),掛載U盤指令碼檔案和解除安裝U盤指令碼檔案中都用到sudo命令,因此需要使用者手動的輸入密

Shell指令碼互動之:自動輸入密碼

Shell指令碼互動之:自動輸入密碼 2016年04月09日 19:41:26 zhangjikuan 閱讀數:58208 標籤: Shell互動自動輸入密碼expect重定向管道 更多

指令碼連結 ssh 自動輸入密碼

上週工作中,遇見一些重複性的工作,為了方便,於是寫起了指令碼。 在這個指令碼中,需要通過 s s

linux指令碼實現自動輸入密碼

使用Linux的程式設計師對輸入密碼這個舉動一定不陌生,在Linux下對使用者有嚴格的許可權限制,幹很多事情越過了許可權就得輸入密碼,比如使用超級使用者執行命令,又比如ftp、ssh連線遠端主機等等,如下圖 那麼問題來了,在指令碼自動化執行的時候需要輸入密碼怎麼辦?比如你

linux 普通使用者登入後,執行 shell指令碼自動輸入密碼切換到root

1.首先安裝expect 2.2.編寫指令碼  /home/zukgit/suz.sh #!/bin/bash # #!/usr/bin/expect -f 使用這種方式 程式無法執行 expect -c " spawn su - expect \":\" send

shell指令碼自動輸入密碼

在shell指令碼中需要用root用的來執行指令:sudo 自動輸入密碼echo "password" | sudo -S netstat -tlnp       -S          The -S (stdin) option causes sudo to read t

指令碼中呼叫psql如何自動輸入密碼

設定環境變數PGPASSWORD #linux export PGPASSWORD=12345 #windows set PGPASSWORD=12345 使用密碼檔案.pgpass 在

通過expect免自動輸入密碼登陸遠程服務器

新建 文件 安裝 nbsp exp 輸入密碼 spa 執行 0.10 通過expect免自動輸入密碼登陸遠程服務器 1、前提必須已經安裝expect 2、新建login.sh,文件內容如下 #!/usr/bin/expect -f spawn ssh [email 

shell中scp自動輸入密碼

shell``` #!/bin/bash des_pass=testtest expect -c " spawn scp target/aaa-0.0.1.war [email protected]/* */:/home/GameUser/MagicvesselUserWeb/aaa-releas

ubuntu 系統用戶sudo輸入密碼

sudo 輸入密碼 use nop 系統 class col user div cd /etc/sudoers.dvi nopasswd4sudo username ALL=(ALL) NOPASSWD:ALL ubuntu 系統用戶sudo免輸入密碼

expect 普通用戶自動輸入密碼到root下,執行命令

expect案例:當前服務器取消了直接使用root登錄服務器,只能使用普通用戶先登錄,然後再su - root 執行root下的命令。 shell腳本如下: #!/usr/bin/expect -fset password {root_password}spawn su - rootexpect "

ssh采用expect實現自動輸入密碼登錄、拷貝

cep .html tro from 效果 方式 目標 led 交互 1. 引言 最近做了一個項目,需要頻繁與另一臺主機進行文件的傳輸;中間想到了很多方式:FTP、samba、curl等,但是還是感覺scp最好用。 SCP使用教程可參閱:http://www.jb51.

[work] sshfs掛載時自動輸入密碼

大家都知道登陸ssh可以用sshpass自動輸入密碼,但是掛載sshfs卻不行,其實sshpss是可以給sshfs輸入密碼的,只需要使用引數-o ssh_command=’sshpass -p password ssh’。 例如: sshfs -o ssh_command='sshpass

Vivo/Oppo手機安裝app時自動輸入密碼以及點選安裝

Vivo手機和Oppo等手機在安裝App的時候總是會有一個討厭的彈窗讓我們輸入密碼或者點選繼續安裝,嚴重的影響了開發效率。如下圖所示 這簡直是無法忍受。於是想著寫一個軟體幫我自動點選。第一是想到的用輔助功能在介面上點。這樣是可以,但是經常服務在後臺被莫名其妙的停止了,而且在密碼窗介

sudo 不用輸入密碼

第一種方式 pw.sh  #!/bin/bash  echo 'xxxxx' SUDO_ASKPASS=/var/lib/jenkins/pw.sh sudo -A gbp buildpackage --git-ignore-branch -sa 第二種方式 vim /

postgresql在windows下備份的批處理檔案(修改版),提示輸入密碼時,能自動輸入密碼

在網上找到一篇文章《PostgreSQL Windows自動備份指令碼》 覺得不錯,試了一下,發現批處理檔案執行停止在提示輸入密碼那。 >pg_dump -U postgres -W  database1 > c:/backup.tar >passwo

Linux下後臺程式完成自動輸入密碼等互動行為的例子

今天要開發一個定時任務,然後加入cron列表中。但是有個問題擺在眼前,指令碼的執行中需要輸入資料庫密碼: mysql -u root -p << SQL use db; set names utf8; `cat task.sql` SQL 執行上述程式碼後,會

ubuntu 終端使用sudo輸入密碼的方法

首先,賦予/etc/sudoers寫許可權: sudo chmod u+w /etc/sudoers 使用gedit開啟: sudo gedit /etc/sudoers 找到%sudo    ALL=(ALL:ALL)  ALL 改為: %sudo    ALL