同じIPアドレスを使用する多くのデバイスに接続しています。それらをルーターに接続すると、警告メッセージREMOTE Host IDENTIFICATION HAS CHANGED!
が表示され、リモートホストに接続したい場合はssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "xx.xx.xx.xx"
を実行する必要があります。
私の現在の戦略:
ssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "xx.xx.xx.xx"
.bash_profile
で設定していない場合に備えて、1行を他の端末にコピーして貼り付けることができます。xx.xx.xx.xx
は構成可能である必要があります。エイリアスに引数を提供できないので(少なくともそう思う)read
で解決しようとしました:
$ alias ssh-keyrm='read LAST_SSH_IP_ADDRESS_CLEARED && ssh-keygen -f "$HOME/.ssh/known_hosts" -R "$LAST_SSH_IP_ADDRESS_CLEARED"'
$ ssh-keyrm
xx.xx.xx.xx
それをさらに最適化する方法に関するアドバイスはありますか?
ホストキーが最初から保存されないようにする別のソリューション
これはsshを安全にするものの一部を無効にすることに注意してください。接続しているホストが実際にあなたがそう思っているホストであることの確認です!
~/.ssh/config
にセクションを追加
Host 192.168.*.*
StrictHostkeyChecking no
UserKnownHostsFile /dev/null
Bashで事前定義されたものに引数を渡したい場合は、エイリアスの代わりに関数を使用して同じ効果を得ることができます。
ssh-keyrm() { ssh-keygen -f "$HOME/.ssh/known_hosts" -R "$1"; }
そのように実行されます:
$ ssh-keyrm 127.0.0.1
エイリアスと同様に、関数は.bashrc、.bash_profileに保存するか、シェルで定義することができます。
エイリアスに引数を指定することはできません
Bashエイリアスは単純な展開として機能するため(エイリアス名はエイリアス値に置き換えられるだけです)、$ nを使用してindividual引数を参照することはできません。
ただし、コマンドの最後である限り、引数を指定できます。このようなエイリアスで:
alias rmh="ssh-keygen -f ~/.ssh/known_hosts -R"
rmh 192.168.0.1
として実行できます。Wordrmh
は展開されますが、それに続くすべての引数は同じ場所に残ります。
同じIPを使用するさまざまなデバイスで同様の問題がありますが、それを解決するために少し異なるアプローチをとりました:ホストキーがknown_hosts
そもそも。
alias sshn='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
次に、ホストキーセキュリティを無効にするたびにsshn
を実行します。
$ sshn [email protected]
Warning: Permanently added '192.168.1.1' (ECDSA) to the list of known hosts.
[email protected]'s password:
sshは、既知のホストにホストを追加したことを伝えますが、実際には/dev/null
。ロギングレベルをいじることでこれを抑制することができますが、他の有用なメッセージがオフになる可能性があります。
私もStrictHostKeyChecking=no
これにより、認証プロンプトをスキップしますが、キーフィンガープリントを表示する場合は、そのオプションを省略できます。