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"如果我仍想与远程主机连接,则需要运行。
我目前的策略:
ssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "xx.xx.xx.xx".bash_profile.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。
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会被扩展,但它后面的所有参数仍然会保留在同一个地方。
我有使用相同的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 安全的部分原因,验证您连接的主机实际上是您认为的主机!
添加一个部分到 ~/.ssh/config
host 192.168.*.*
StrictHostkeyChecking no
UserKnownHostsFile /dev/null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2058 次 |
| 最近记录: |