规避“远程主机标识已更改”警告

Tin*_*yen 8 linux ssh alias pipe

我正在连接到许多使用相同 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.
  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
Run Code Online (Sandbox Code Playgroud)

关于如何进一步优化它的任何建议?

Sma*_*ter 16

如果您想将参数传递给在 Bash 中预定义的东西,您可以使用函数而不是别名来达到相同的效果:

ssh-keyrm() { ssh-keygen -f "$HOME/.ssh/known_hosts" -R "$1"; }
Run Code Online (Sandbox Code Playgroud)

哪个将这样运行:

$ ssh-keyrm 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

与别名一样,函数可以存储在 .bashrc、.bash_profile 中,或在 shell 中定义 inlne。

  • 注意:如果已经有 `ssh-keyrm` 别名,那么 `ssh-keyrm()` 会触发它。OP 首先需要“unalias ssh-keyrm”。 (4认同)

use*_*686 13

您不能为别名提供参数

Bash 别名用作简单的扩展(别名只是被别名值替换),因此它们不能使用 $n引用单个参数。

但是,您可以提供参数,只要它们位于命令的末尾即可。使用这样的别名:

alias rmh="ssh-keygen -f ~/.ssh/known_hosts -R"
Run Code Online (Sandbox Code Playgroud)

你可以运行它rmh 192.168.0.1,虽然这个词rmh会被扩展,但它后面的所有参数仍然会保留在同一个地方。


jos*_*736 8

我有使用相同的IP不同的设备有类似的问题,但采取了略微不同的方法来解决这个问题:防止主机密钥从要known_hosts摆在首位

alias sshn='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
Run Code Online (Sandbox Code Playgroud)

然后sshn在您想要禁用主机密钥安全性时运行。

$ sshn user@192.168.1.1
Warning: Permanently added '192.168.1.1' (ECDSA) to the list of known hosts.

user@192.168.1.1's password:
Run Code Online (Sandbox Code Playgroud)

ssh 告诉您它将主机添加到已知主机,但实际上并没有因为写入到/dev/null. 您可以通过调整日志记录级别来抑制这种情况,但这可能会关闭其他有用的消息。

我也有StrictHostKeyChecking=no它跳过真实性提示,但如果您更喜欢查看密钥指纹,则可以省略该选项。

  • 在同一个方向上,我在我的 `~/.ssh/config` `host 192.168.2.* StrictHostKeyChecking no UserKnownHostsFile /dev/null` 中使用以下代码段 (2认同)

Pel*_*lle 8

防止主机密钥首先被保存的另一种解决方案

请注意,这将禁用使 ssh 安全的部分原因,验证您连接的主机实际上是您认为的主机!

添加一个部分到 ~/.ssh/config

host 192.168.*.*
    StrictHostkeyChecking no
    UserKnownHostsFile /dev/null
Run Code Online (Sandbox Code Playgroud)