![在歷史檔案中使用 SSH 時自動完成主機名](https://rvso.com/image/89155/%E5%9C%A8%E6%AD%B7%E5%8F%B2%E6%AA%94%E6%A1%88%E4%B8%AD%E4%BD%BF%E7%94%A8%20SSH%20%E6%99%82%E8%87%AA%E5%8B%95%E5%AE%8C%E6%88%90%E4%B8%BB%E6%A9%9F%E5%90%8D.png)
我正在尋找一個功能,可以幫助我自動完成我“sshed”的伺服器,並且在我的.bash_history
文件中,而不會弄亂known_hosts
文件/etc/bash_completition
,或者只需從我的history
.
我不能弄亂該known_hosts
文件,因為其中的資訊就像“加密”一樣,並且尋找如何避免這種情況並不那麼重要。
例如
$ tail -n 2 ~/.ssh/known_hosts
|1|D90I41jNxFy83ZhAoyG7gj0+LpM=|Zkru+0Yi9Q9UNafHpj1IVMGGnAw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArih5PrEeGsMHm+9ytkiiOgNNIh6fQAEFfdDw9IwkOGs13g+YN6k61rRbdXj97N+vvuGslcCL9uDMY+M6bqDX4k2kGJuvmsSBgIWOjOiOtrW6wWaflGO0OKQ39F1R92Bw3gB1kNg8Es3XjNE1D+CRXt/EQLWLBFmF3p41PpoRg/Gyvw4XqQSMOYdGsr0OaE8ozrXWO2rQo2NDe6BDJzSGqZ234jCtnRLEtFBFvisTEbNCYFRkhKMSfrUecyK5bjHRehEHKfsPxNDTCOl7xrx1DDTng/BIgxyCA21s+xa05oNulkMMd/1qNrekoUUFxwJpb1rf6vrW5CkeMIOhCr5Nxw==
|1|Cl6c716uEoPmovaRDDwkM+bYFTc=|VXUrsTRDptMOg/Nm3anFMwjy5O8= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArih5PrEeGsMHm+9ytkiiOgNNIh6fQAEFfdDw9IwkOGs13g+YN6k61rRbdXj97N+vvuGslcCL9uDMY+M6bqDX4k2kGJuvmsSBgIWOjOiOtrW6wWaflGO0OKQ39F1R92Bw3gB1kNg8Es3XjNE1D+CRXt/EQLWLBFmF3p41PpoRg/Gyvw4XqQSMOYdGsr0OaE8ozrXWO2rQo2NDe6BDJzSGqZ234jCtnRLEtFBFvisTEbNCYFRkhKMSfrUecyK5bjHRehEHKfsPxNDTCOl7xrx1DDTng/BIgxyCA21s+xa05oNulkMMd/1qNrekoUUFxwJpb1rf6vrW5CkeMIOhCr5Nxw==
我發現這個解決方案但由於其他不重要的原因,我沒有該~/.ssh/config
文件。
答案1
更簡單的方法是在您的中known_hosts
停用您的雜湊,以允許從所有歷史記錄中自動完成,或僅在您的中列出您的主機(您可以在那裡儲存所有的和,或建立別名) 。HashKnownHosts no
~/.ssh/config
~/.ssh/config
Ports
Users
我很欣賞這種創造力,但是當我們已經擁有開箱即用的相同功能時,為什麼還要重新發明輪子(HashKnownHosts yes
預設的 Ubuntu 除外,這會破壞此功能)。
答案2
因此,由於我只想知道如何自動完成bash_history
文件中的主機目標,因此我發現此功能希望能夠幫助處於相同情況的任何人。
只需執行以下行
$ complete -W "$(echo $(grep '^ssh ' .bash_history | sort -u | sed 's/^ssh //'))" ssh
complete
- 是 bash 內建函數。所以系統上沒有二進位。它處理按下時如何完成命令-W
- 製作自動完成單字列表grep '^ssh' .bash_history
.bash_history
- 從檔案傳回所有以 ssh 開頭的行sort -u
- 使輸出線為uniqsed 's/^ssh //'
ssh
- 刪除每行的開頭字串ssh
- 執行ssh
指令時
如果您不僅ssh hostname
使用 和 等其他功能ssh user@hostname
,則ssh user@hostname -p 2222
必須使用regex
和grep|sed
功能僅保留hostname
或 任何您想要自動完成的內容
將完整的行插入到您的.bashrc
文件中,以便您在每次啟動會話時都具有自動完成功能。