履歴ファイルでSSHを使用する場合のホスト名の自動補完

履歴ファイルでSSHを使用する場合のホスト名の自動補完

私はファイルを.bash_history台無しにせずに"sshed"サーバーとファイルを自動化したり。known_hosts/etc/bash_completitionhistory

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/configPortsUsers

創造性に感謝しますが、基本的に同じ機能が既にあるので、なぜ車輪を再開発する必要がありますか(デフォルト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- 出力ラインをuniqにします。
  • sed 's/^ssh //'ssh- 各行の先頭にある文字列を削除します。
  • ssh-sshコマンド実行時

ssh hostname次のような他の機能を使用するssh user@hostnameだけでなく、オートコンプリートしたい機能のみを維持したり、必要な機能をssh user@hostname -p 2222使用する必要がある場合regexgrep|sedhostname

.bashrcセッションを開始するたびにオートコンプリートされるように、行全体をファイルに挿入します。

関連情報