![履歴ファイル内で SSH を使用する場合にホスト名を自動補完する](https://rvso.com/image/89155/%E5%B1%A5%E6%AD%B4%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E3%81%A7%20SSH%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AB%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D%E3%82%92%E8%87%AA%E5%8B%95%E8%A3%9C%E5%AE%8C%E3%81%99%E3%82%8B.png)
私は、ファイルや.bash_history
をいじることなく、自分が時々「sshed」して自分のファイル内にあるサーバーを自動補完し、自分の から取得する機能を探しています。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
- 出力行を一意にするsed 's/^ssh //'
ssh
-各行の先頭の文字列を削除しますssh
-ssh
コマンド実行時
またはssh hostname
などの他の機能を使用するだけでなく、または機能のみを使用して、または自動補完したいものだけを保持する必要があります。ssh user@hostname
ssh user@hostname -p 2222
regex
grep|sed
hostname
.bashrc
セッションを開始するたびにオートコンプリート機能が動作するように、ファイル に完全な行を挿入します。