前言
公司開發使用docker
,每次登陸自己開發機總要輸入ssh user_name@ip_string
,然後再確認輸入password
#,手快了還常常會輸錯。身為一個懶人,肯定要找一個取巧的方式,查看了下ssh
命令,由於它要進行一次跟伺服器的加密交互,所以沒有直接附帶密碼登陸的選項,只好作罷。
推薦:《Linux教學》
前些天在同事進行技術分享時,看到他竟然只輸入了一行指令./test. sh
就成功登陸了開發機,甚是驚異,於是回來搜尋研究了一下,遂成此文。
shell腳本基礎
在編寫ssh自動登陸腳本之前,先說一下shell腳本的基礎,此基礎不是一些語法什麼的,網路上到處都是,這裡總結了一下shell腳本的運作機制~
shell腳本的運作方式
#首先要說shell的幾種啟動方式,正是踩了腳本啟動的坑,才使用原來十分鐘就搞定的腳本,花了兩個小時才搞定。同時也使得我們運行shell,知其所以然。
透過檔案名稱執行
shell腳本可以直接透過檔案名稱執行,需要注意的是檔案需要執行權限。透過sudo chmod x ./file_name.sh
來為檔案新增執行權限;
指定腳本解釋器來執行檔案
我們常用的sh file_name.s
h 是指定了腳本解釋器/bin/sh
來解釋執行腳本;常見的腳本解釋器還有:/bin/bash
等等,我們可以使用ls -l /bin/*sh
指令來查看目前可用的腳本解釋器;
使用. ./file_name或source指令執行腳本
這種方式不會像前兩種方式一樣fork一個子程序去執行腳本,而是使用當前shell環境執行,用於.bashrc或.bash_profile被修改的時候,我們不必重啟shell或者重新登入系統,就能使目前的變更生效。
shebang
我們寫一個shell腳本時,總是習慣在最前面加上一行#!/binbash,它就是腳本的shebang,至於為什麼叫這麼個奇怪的名字,C語言和Unix的開發者丹尼斯·里奇稱它為可能是類似於"hash-bang"的英國風描述性文字;
貼一段wiki上的解釋:
在電腦科學中,Shebang是一個由井號和嘆號構成的字串行,其出現在文字檔案的第一行的前兩個字元。在檔案中存在Shebang的情況下,類別Unix作業系統的程式載入器會分析Shebang後的內容,將這些內容作為解釋器指令,並呼叫指令,並將載有Shebang的檔案路徑作為該解釋器的參數。
簡單的說,它指示了此腳本運行時的解釋器,所以,使用檔案名稱直接執行shell腳本時,必須帶上shebang; 此外,我們還可以在shebang後面直接附加選項,執行時我們預設使用選項執行;
如test.sh的shebang為#!/bin/sh -x,那我們執行腳本時:
./test.sh hello
相當於:
bin/sh -x ./test.sh hello;
而寫一個ssh自動登陸腳本,需要用到的shebang(解釋器)為/usr/bin/expect;
需要注意的是:在指定腳本解釋器來執行腳本時,shebang會被指定的腳本解釋器覆蓋,即優先使用指定的腳本解釋器來執行腳本(習慣性地用sh ./test.sh卻提示command not found)
##expect解釋器
expect是一個能實現自動和互動式任務的解釋器,它也能解釋常見的shell語法命令,其特色在以下幾個命令:#spawn指令:
spawn command指令會fork一個子程序去執行command指令,然後在此子行程中執行後面的指令;在ssh自動登陸腳本中,我們使用spawn ssh user_name@ip_str,fork一個子程序執行ssh登陸指令;expect指令:
expect指令是expect解釋器的關鍵指令,它的一般用法為expect "string",即期望取得到string字串,可在在string字串裡使用* 等通配符;string與命令列傳回的資訊相符後,expect會立刻向下執行腳本;set timeout指令:
set timeout n指令將expect指令的等待逾時時間設為n秒,在n秒內還沒有取得到其期待的指令,expect 為false,腳本會繼續往下執行;send指令:
send指令的一般用法為send "string",它們會我們平常輸入指令一樣向命令列輸入一則訊息,當然不要忘了在string後面加上上\r 表示輸入回車;interact指令:
interact命令很简单,执行到此命令时,脚本fork的子进程会将操作权交给用户,允许用户与当前shell进行交互;
完成脚本
以下是一个完成版的脚本 test.sh:
#!/usr/bin/expect // 指定shebang set timeout 3 // 设定超时时间为3秒 spawn ssh user_name@172.***.***.*** // fork一个子进程执行ssh命令 expect "*password*" // 期待匹配到 'user_name@ip_string's password:' send "my_password\r" // 向命令行输入密码并回车 send "sudo -s\r" send "cd /data/logs\r" // 帮我切换到常用的工作目录 interact // 允许用户与命令行交互
执行 sudo chmod +x ./test.sh
命令给shell脚本添加执行权限;
运行 ./test.sh
命令,一键登陆成功!
简单的几个命令,,搭配起来解决了与命令行的交互问题后,很多复杂的功能也不在话下了~
alias别名
脚本完成了,可是还是有些小瑕疵:
输入./file_name.sh
命令太长。。。
只能在脚本目录中才能执行,不然使用绝对路径输出的命令更长。
这里我们想到了linux的alias命令:
alias命令:
alias命令使用方式为 alias alias_name="ori_command"
,将alias_name
设置为ori_command
的别名,这样我们输入执行alias_name
,就相当于执行了ori_command;
可是,我们会发现,当你关闭当前shell后,再打开一个shell窗口,再使用alias_name,系统提示command not found;
有没有能保持命令的方式呢?编辑bash_profile
文件。
bash_profile文件
我们编辑bash_profile文件,此文件会在终端窗口创建的时候首先执行一次,所以可以帮我们再设置一次别名;
执行命令vim ~./bash_profile,
在文件内部添加:
alias alias_name="/root_dir/../file_name.sh
保存后,再使用 . ~./bash_profile
或source ~./bash_profile
在当前脚本执行一遍设置别名命令,完成设置;
这样,我们无论在哪个目录,只要输入alias_name
命令,回车,真正的一键登陆!
以上是詳解shell實現SSH自動登陸的詳細內容。更多資訊請關注PHP中文網其他相關文章!

要監控Debian系統上的Node.js性能指標,您可以使用多種工具和方法。以下是一些常用的方法和工具:使用Easy-MonitorEasy-Monitor是一款基於Egg.js的Node.js性能監控解決方案,提供了針對Node.js進程與系統指標的性能監控、錯誤日誌展示與依賴、Npm模塊安全風險提示、自定義智能運維告警與線上進程實時狀態導出等功能。使用NetDa

在Debian系統上集成Go語言日誌管理工具,步驟如下:一、安裝Go語言環境首先,確保你的Debian系統已安裝Go。若未安裝,執行以下命令:sudoaptupdatesudoaptinstallgolang-go驗證安裝:goversion二、選擇日誌工具Go語言有多種日誌工具,例如logrus、zap、zerolog等。本文以logrus為例。三、安裝logrus使用goget命令安裝:gogetgithub.com/sirupsen/logrus四、配置l

本文探討如何利用Golang日誌機制提升Debian系統的性能。我們將逐步分解優化策略,並提供示例代碼。一、高效日誌記錄策略精細化日誌級別:根據調優目標選擇合適的日誌級別(INFO,DEBUG,ERROR等)。避免冗餘日誌,減少I/O負載。日誌輪轉與歸檔:定期分割和歸檔日誌文件,防止單文件過大影響性能和存儲。二、並發日誌處理Goroutine並發:利用Golang的Goroutine實現並發日誌寫入,提升效率。 Goroutine數量控制:使用channel或其他機制限制

在Debian系統上配置Golang應用的日誌級別,需要遵循以下步驟:選擇日誌庫:首先,選擇合適的日誌庫。 Go標準庫的log包功能簡單,而第三方庫如logrus和zap則提供更強大的功能和性能。設置日誌級別:根據所選日誌庫,設置相應的日誌級別。不同庫的設置方法有所不同。使用標準庫logGo標準庫的log包本身不直接支持日誌級別,但可通過自定義輸出格式來模擬。以下示例演示瞭如何根據預設級別控制輸出:packagemainimport("log""os"

本文探討在Debian系統上如何優化Golang應用的日誌輸出速度,提升系統效率。主要策略如下:高效日誌庫的選擇:優先選擇高性能的日誌庫,例如zap或logrus,它們通常比標準庫log性能更優。精簡日誌級別:根據實際需求調整日誌級別(debug、info、warn、error等)。開發環境可使用debug級別,生產環境則建議使用info或warn級別,避免冗餘信息輸出。異步日誌記錄:採用異步日誌寫入機制,將日誌寫入緩衝區,再由獨立的goroutine負責將緩衝區內容寫入磁

本文介紹如何利用Golang日誌機制在Debian系統中高效診斷網絡問題。我們將探討幾種實用方法,幫助您快速定位並解決網絡連接故障。一、日誌記錄標準庫log包:Golang的log包是記錄網絡請求和響應細節的理想選擇。在發送請求前後添加日誌,可以清晰地追踪請求的發送和接收過程。以下是一個簡單的示例:packagemainimport("log""net/http""time")funcmain(){client:=&

在Debian系統上部署Node.js應用,安全性至關重要。本文概述了確保Node.js應用安全性的多方面策略,涵蓋安裝、配置、持續監控和更新等環節。一、Node.js安裝與更新推薦使用NodeSourcePPA安裝並管理Node.js和npm:curl-fsSLhttps://deb.nodesource.com/setup_17.x|sudo-Ebash-sudoapt-getinstall-ynodejs及時更新至最新版本,修復已知漏洞:

在Debian系統上部署GitLab時,可能會遇到軟件包衝突,尤其是在系統已安裝其他Git版本或與GitLab依賴項存在版本衝突的情況下。本文提供一些排查和解決方法。一、前置準備:滿足最低系統需求在安裝前,請確認您的Debian系統滿足GitLab的最低資源要求,包括足夠的內存、磁盤空間和CPU性能。二、系統更新與依賴安裝更新系統軟件包:使用以下命令更新系統到最新版本:sudoapt-getupdatesudoapt-getupgrade-y安裝必要依賴:安裝GitL


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。