web-dev-qa-db-ja.com

「リモートホストの識別情報が変更されました」という警告の回避

同じIPアドレスを使用する多くのデバイスに接続しています。それらをルーターに接続すると、警告メッセージREMOTE Host IDENTIFICATION HAS CHANGED!が表示され、リモートホストに接続したい場合はssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "xx.xx.xx.xx"を実行する必要があります。

私の現在の戦略:

  1. 以下から短縮コマンドを作成したい:ssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "xx.xx.xx.xx"
  2. どのユーザーからでも実行できます。
  3. 単一のコマンドである必要があります。 (つまり、.bash_profileで設定していない場合に備えて、1行を他の端末にコピーして貼り付けることができます。
  4. 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

それをさらに最適化する方法に関するアドバイスはありますか?

8
Tin Nguyen

ホストキーが最初から保存されないようにする別のソリューション

これはsshを安全にするものの一部を無効にすることに注意してください。接続しているホストが実際にあなたがそう思っているホストであることの確認です!

~/.ssh/configにセクションを追加

Host 192.168.*.*
    StrictHostkeyChecking no
    UserKnownHostsFile /dev/null
8
Pelle

Bashで事前定義されたものに引数を渡したい場合は、エイリアスの代わりに関数を使用して同じ効果を得ることができます。

ssh-keyrm() { ssh-keygen -f "$HOME/.ssh/known_hosts" -R "$1"; }

そのように実行されます:

$ ssh-keyrm 127.0.0.1

エイリアスと同様に、関数は.bashrc、.bash_profileに保存するか、シェルで定義することができます。

16
Smartster

エイリアスに引数を指定することはできません

Bashエイリアスは単純な展開として機能するため(エイリアス名はエイリアス値に置き換えられるだけです)、$ nを使用してindividual引数を参照することはできません。

ただし、コマンドの最後である限り、引数を指定できます。このようなエイリアスで:

alias rmh="ssh-keygen -f ~/.ssh/known_hosts -R"

rmh 192.168.0.1として実行できます。Wordrmhは展開されますが、それに続くすべての引数は同じ場所に残ります。

13
user1686

同じ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これにより、認証プロンプトをスキップしますが、キーフィンガープリントを表示する場合は、そのオプションを省略できます。

8
josh3736